如何正确遍历IMG_####_0格式图片?解决FileNotFoundError问题
解决文件名遍历不匹配的问题
嘿,这个问题我之前也碰到过!核心问题是你的代码没处理好文件名里的四位前导零,而且遍历的数字范围也不对,才导致找不到IMG_0_0.png这种不存在的文件。
错误原因拆解
你的原代码range(150)会生成从0到149的数字,直接用format(i)转成字符串的话,数字1会变成"1",0变成"0",生成的文件名就是IMG_0_0.png、IMG_1_0.png这类,和你实际的IMG_0001_0.png、IMG_0022_0.png格式完全不匹配,自然触发FileNotFoundError。
正确实现方式
你需要做两个调整:
- 调整数字范围:因为你的文件从
IMG_0001_0.png开始,要遍历前150张的话,应该用range(1, 151)(左闭右开,所以结束值是151)。 - 补前导零:格式化数字时,用
04d格式符强制把数字转成四位长度,不足的地方用0补齐。
简洁版代码(用format)
fnames = ['IMG_{:04d}_0.png'.format(i) for i in range(1, 151)]
更现代的f-string写法
fnames = [f'IMG_{i:04d}_0.png' for i in range(1, 151)]
进阶:避免不存在的文件报错
如果担心某些编号的文件缺失,可以加入存在性检查,遍历的时候只保留确实存在的文件路径:
import os # 替换成你的图片目录路径 image_folder = '/Users/me/images' valid_fnames = [] for i in range(1, 151): filename = f'IMG_{i:04d}_0.png' full_path = os.path.join(image_folder, filename) if os.path.exists(full_path): valid_fnames.append(full_path) else: print(f"提示:文件 {full_path} 不存在,已跳过")
这样生成的valid_fnames里就全是能找到的文件路径啦~
内容的提问来源于stack exchange,提问作者Wasswa Samuel
相关产品推荐
相关产品推荐

