用图案迭代图像

时间:2018-03-09 18:29:36

标签: python-3.x iteration

我有数千张标有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.pngIMG_0150_0.png

3 个答案:

答案 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")