重命名前必须显式排序文件以避免自然序错乱,推荐用sorted()配合natural_sort_key;命名规则建议用递增序号如f"img_{i:04d}.jpg";操作前预览映射,用pathlib.path.rename()安全处理跨系统、子目录归档及中文路径;需捕获fileexistserror和permissionerror,清除只读属性,加进度提示与错误日志。

重命名前先确认文件顺序和命名规则
Python 默认读取目录下文件的顺序不保证是自然排序(比如 1.jpg、10.jpg、2.jpg 会排成 1.jpg、10.jpg、2.jpg),直接用 os.listdir() 或 pathlib.Path.iterdir() 会导致重命名错乱。必须显式排序。
- 用
sorted()配合natural_sort_key函数(或re提取数字)处理带数字的文件名 - 避免用
glob.glob("*.jpg"),它不保证顺序;改用sorted(Path(".").glob("*.jpg")) - 命名规则建议包含原始时间戳或递增序号,例如
f"IMG_{i:04d}.jpg",别用纯时间戳(同一秒多图会冲突) - 先打印预览重命名映射(旧→新),确认无误再执行
rename()
用 pathlib 逐个 rename 更安全可靠
os.rename() 在跨文件系统时可能失败,且不自动创建父目录;pathlib.Path.rename() 更直观,配合 mkdir(parents=True, exist_ok=True) 可无缝支持归档到子目录。
- 归档路径建议按日期或批次建子目录,如
archive/202405/,用target_dir = Path("archive") / "202405" - 重命名 + 移动一步到位:
src_path.rename(target_dir / new_name) - 务必加
try...except FileExistsError:捕获重名冲突,跳过或加后缀(如_dup) - 不要批量
os.rename()后再统一移动——出错难回滚;每个文件单独处理,失败可记录日志
处理中文路径、特殊字符和只读文件
Windows 下常见路径含中文或空格,Linux 下可能遇权限问题;PermissionError: [WinError 5] 拒绝访问 多因文件被占用或只读属性。
- 用
pathlib.Path自动处理路径拼接,避免手动拼字符串出错 - 检查并清除只读属性:
src_path.chmod(0o644)(Windows/Linux 均有效) - 跳过正在被其他程序打开的图片(如被看图软件锁住),捕获
PermissionError并记录文件名 - 对含 Unicode 的路径,确保 Python 脚本文件保存为 UTF-8,且终端/IDE 支持 UTF-8(PyCharm 默认 OK,CMD 需
chcp 65001)
批量操作必须加进度提示和错误日志
上千张图跑起来没反馈容易误以为卡死,而静默失败更糟——可能只处理了前几十张就停了。
- 用
tqdm包:安装pip install tqdm,然后for f in tqdm(files): - 错误统一写入
error.log,每行格式:2024-05-22 14:30:22 | IMG_001.jpg | PermissionError: [WinError 5] - 成功数/总数实时显示,避免靠肉眼数进度条
- 脚本开头加
if __name__ == "__main__":,防止导入时意外执行
实际运行时最常卡在权限和顺序上,尤其 Windows 资源管理器后台锁着缩略图生成进程——关掉资源管理器再跑,或者加 100ms 重试延迟。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











