本文最后更新于 35 天前,其中的信息可能已经有所发展或是发生改变。
一、环境准备
- 下载并安装pycharm
https://www.jetbrains.com/pycharm/download/
- 文件结构建议
├── main.py # 本代码文件
├── img/ # 源文件夹(建议存放待处理图片)
│ └── image/ # 实际源图片目录
└── target_data/ # 自动创建的目标文件夹
- 复制代码到main.py文件,内容如下:
import os
import os.path as osp
import numpy as np
import cv2
def cy_imread_chinese(file_path):
"""支持中文路径图片读取"""
try:
img_array = np.fromfile(file_path, dtype=np.uint8)
cv_img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
if cv_img is None:
raise ValueError("无法解码图像文件: " + file_path)
return cv_img
except Exception as e:
raise RuntimeError(f"读取文件失败: {file_path}") from e
def folder_rename(src_folder_path, target_folder_path):
"""迁移并重命名图片文件"""
# 创建目标文件夹
os.makedirs(target_folder_path, exist_ok=True)
# 获取源文件列表
try:
file_names = os.listdir(src_folder_path)
except FileNotFoundError:
raise
except PermissionError:
raise
# 处理文件
for i, file_name in enumerate(file_names):
print(f"{i}:{file_name}")
# 构建完整路径
src_path = osp.join(src_folder_path, file_name)
if not osp.isfile(src_path):
continue # 跳过子目录
try:
# 读取源文件(支持中文路径)
img = cy_imread_chinese(src_path)
# 生成新文件名
new_filename = f"train_data_{i:04d}.jpg" # 0000格式编号
dst_path = osp.join(target_folder_path, new_filename)
# 写入新文件(使用cv2保存)
cv2.imwrite(dst_path, img)
# 可选:删除原文件(谨慎使用!)
# os.remove(src_path)
except Exception as e:
print(f"处理文件失败: {file_name} - {str(e)}")
continue
if __name__ == '__main__':
try:
# 使用实际路径替换
folder_rename(
src_folder_path="img/image",
target_folder_path="target_data/image"
)
except FileNotFoundError as e:
print(f"路径不存在: {e.filename}")
except PermissionError as e:
print(f"权限不足: {e.filename}")
except Exception as e:
print(f"未处理异常: {type(e).__name__} - {str(e)}")
finally:
print("操作执行完毕")
- 安装依赖库
# macos系统如果权限不足可以加上sudo
# 配置清华源(一劳永逸)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
#安装numpy
pip install numpy
# 然后安装opencv-python
pip install opencv-python
---
二、参数配置
修改代码最后一行的路径参数:
# 原始调用代码
folder_rename(
"img/image", # 源文件夹路径(需替换为实际路径)
"target_data/image" # 目标文件夹路径(自动创建)
)
---
三、运行方式
方式1:命令行运行
python main.py
方式2:IDE运行
直接使用PyCharm/VSCode等工具运行脚本
四、执行效果演示
假设源文件夹内容:
img/image/
├── 测试图片1.jpg
├── photo(2).png
└── IMG_2023.jpg
运行后将生成:
target_data/image/
├── train_data_0.jpg
├── train_data_1.jpg
└── train_data_2.jpg
---
五、关键功能说明
-
中文路径支持
- 使用
np.fromfile
+cv2.imdecode
读取中文路径文件
- 使用
-
自动创建目录
- 目标文件夹不存在时会自动创建
-
格式统一化
-
强制输出为.jpg格式
-
文件名格式化为
train_data_序号.jpg
-
-
安全重命名
- 使用
os.rename
进行文件移动操作
- 使用
六、常见问题处理
问题现象 | 解决方案 |
---|---|
FileNotFoundError | 检查源路径是否存在,路径使用/而非 |
图片损坏警告 | 确认源文件是否为有效图片格式 |
权限错误 | 以管理员身份运行/修改目标文件夹权限 |
中文乱码 | 确保IDE使用UTF-8编码 |
七、高级使用技巧
修改命名规则修改格式字符串:
"train_data_{}.jpg".format(i) → "dataset_{:04d}.png".format(i)
添加文件过滤在循环内添加判断:
if not file_name.lower().endswith(('.png', '.jpg')):
continue
保留原始文件注释掉os.rename
行,仅保留:
cv2.imwrite(target_path, src_img)
---
八、注意事项
-
数据备份
-
建议先在小样本文件夹测试
-
重要数据提前备份
-
-
路径规范
-
使用英文路径可避免编码问题
-
不要使用系统保留字符(如
*
,?
等)
-
-
性能优化
-
处理万级图片时建议添加进度条
-
大文件处理需注意内存占用
-