列出文件夹中的png文件

IMJ

我正在尝试在包含其他文件夹的文件夹中列出所有png文件的列表。这是我的代码。

import os
filelist=os.listdir('images')
for fichier in filelist:
    if not(fichier.endswith(".png")):
        filelist.remove(fichier)
print(filelist)

问题是,最后一张照片显示某些子文件夹(但不是全部)逃脱了剔除...

['aa.png', 'Nouveau dossier - Copie', 'Nouveau dossier - Copie (3)', 'Nouveau dossier - Copie (5)', 'zz.png']

我究竟做错了什么 ?

科迪·皮尔索(Cody Piersall)

摘要:永远不要修改要迭代的列表。

而是遍历一个副本:

import os
filelist=os.listdir('images')
for fichier in filelist[:]: # filelist[:] makes a copy of filelist.
    if not(fichier.endswith(".png")):
        filelist.remove(fichier)
print(filelist)

或者,如果您不喜欢制作不必要的副本,请反向进行迭代(只有在您可以保证列表中的项目是唯一的情况下才有效;对于文件系统,这是一个很好的假设):

for fichier in reversed(filelist):
    # do stuff

请注意,您可以使用Python的glob模块来简化此操作:

import glob
print(glob.glob('images/*.png'))

之所以

当您遍历Python中的列表时,在后台,Python实际上正在遍历该列表的索引。您可以看到,每当您实际删除项目时,这都是一个巨大的问题:

l = [1, 2, 2, 3]:
for x in l:
    if x%2 == 0:
        l.remove(x)
    print('x == {}'.format(x))
print('l == {}'.format(l))

您可以通过此处显示的内容判断第二个2被跳过了,l其值为[1, 2, 3]这是因为,无论何时到达和删除前两个,索引都是1(第二个元素)。在下一次迭代中,索引为2在这一点上l == [1,2,3],所以x == 3如果您运行该代码,则可能比该解释更为明显。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章