Python批量重命名目录PNG图片时os.rename执行后文件丢失问题求解
问题原因
- 核心错误1:
os.rename()参数顺序完全颠倒。该函数的正确语法是os.rename(原始文件路径, 目标文件路径),你当前的写法是把还未生成的数字命名路径作为源文件、原有文件作为目标路径,会直接引发覆盖逻辑,导致文件丢失。 - 核心错误2:直接遍历
os.listdir()的实时返回结果。你重命名生成的新数字文件名会被实时加入遍历队列,重复处理刚生成的文件,最终出现一半文件被覆盖的情况,和你遇到的16张文件剩余8张的现象完全吻合。 - 附加问题:
os.listdir()会返回目录下所有条目(包括子目录、隐藏文件、非PNG文件),无过滤逻辑可能引发额外异常。
修复方案
先将所有符合要求的原PNG文件名读取为固定列表,避免遍历实时变动的目录内容,同时修正os.rename()的参数顺序,建议使用os.path.join()拼接路径适配不同操作系统:
import os data_dir_path = '/content/drive/MyDrive/Fruits/train/Fresh Apples/' # 提前筛选所有PNG文件,生成固定遍历列表 png_files = [f for f in os.listdir(data_dir_path) if f.lower().endswith('.png')] for count, filename in enumerate(png_files): src = os.path.join(data_dir_path, filename) dst = os.path.join(data_dir_path, f"{count}.png") os.rename(src, dst)
内容的提问来源于stack exchange,提问作者LeGOATJames23
相关产品推荐
相关产品推荐

