我有数千张标有IMG_####_0
的图片,其中第一张图片为IMG_0001_0.png
,第22张为IMG_0022_0.png
,第100张为IMG_0100_0.png
等。我想要执行一些迭代它们的任务。
我使用此fnames = ['IMG_{}_0.png'.format(i) for i in range(150)]
来迭代第一个150
图片,但我收到此错误FileNotFoundError: [Errno 2] No such file or directory: '/Users/me/images/IMG_0_0.png'
,这表明这不是正确的方法。关于如何捕获此模式同时能够迭代指定数量的图像的任何想法,在我的情况下从IMG_0001_0.png
到IMG_0150_0.png
答案 0 :(得分:1)
fnames = ['IMG_{0:04d}_0.png'.format(i) for i in range(1,151)]
print(fnames)
for fn in fnames:
try:
with open(fn, "r") as reader:
# do smth here
pass
except ( FileNotFoundError,OSError) as err:
print(err)
输出:
['IMG_0000_0.png', 'IMG_0001_0.png', ..., 'IMG_0148_0.png', 'IMG_0149_0.png']
Dokumentation:string-format() 和format mini specification。
'{:04d}' # format the given parameter with 0 filled to 4 digits as decimal integer
另一种方法是创建一个普通字符串并用0填充它:
print(str(22).zfill(10))
输出:
0000000022
但是对于你的情况,格式语言更有意义。
答案 1 :(得分:0)
您需要使用format pattern来获取您正在寻找的格式。您不希望将整数转换为字符串,您特别希望它始终是一个包含四位数的字符串,使用前导0来填充任何空白区域。最好的方法是:
'IMG_{:04d}_0.png'.format(i)
而不是您当前的格式字符串。结果如下:
In [2]: 'IMG_{:04d}_0.png'.format(3)
Out[2]: 'IMG_0003_0.png'
答案 2 :(得分:0)
生成可能名称的列表,并尝试存在缓慢且可怕的迭代文件的方法。
尝试查看https://docs.python.org/3/library/glob.html
如下所示:
from glob import iglob
filenames = iglob("/path/to/folder/IMG_*_0.png")