Python 3.6-枚举文件

时间:2019-01-03 15:57:39

标签: python python-3.x

我正在尝试在文件夹中循环播放一系列jpg文件。我找到了示例代码:

for n, image_file in enumerate(os.scandir(image_folder)):

,它将循环遍历image_folder中的图像文件。但是,似乎没有遵循任何顺序。我的文件名类似000001.jpg000002.jpg000003.jpg等。但是当代码运行时,它没有遵循以下顺序:

000213.jpg
000012.jpg
000672.jpg
....

这里似乎是什么问题?

2 个答案:

答案 0 :(得分:4)

以下是os.scandir()上的相关内容:

  

os。 scandir (path ='。')

     

返回os.DirEntry个对象的迭代器   对应于 path 给定目录中的条目。的   条目以任意顺序产生,特殊条目'.'   和'..'不包括在内。

您不应期望它以任何特定顺序排列。如果您考虑将其作为替代方案,listdir()也是如此。

如果您严格要求它们井井有条,请考虑先对它们进行排序:

scanned = sorted([f for f in os.scandir(image_folder)], key=lambda f: f.name)
for n, image_file in enumerate(scanned):

# ... rest of your code

答案 1 :(得分:1)

我更喜欢使用glob

  

glob模块找到与指定模式匹配的所有路径名   根据Unix Shell使用的规则,尽管结果是   以任意顺序返回。没有波浪号扩展,但* 、?和   用[]表示的字符范围将正确匹配。

如果您处理更复杂的文件结构,则将需要此,因此从glob开始并不意味着那么糟糕。对于您的情况,您也可以如上所述使用os.scandir()

参考:glob module

import glob
files = sorted(glob.glob(r"C:\Users\Fabian\Desktop\stack\img\*.jpg"))
for key, myfile in enumerate(files):
    print(key, myfile)

注意,即使还有.txt之类的其他文件也不会出现在您的list

输出:

C:\Users\Fabian\Desktop\stack>python c:/Users/Fabian/Desktop/stack/img.py
0 C:\Users\Fabian\Desktop\stack\img\img0001.jpg
1 C:\Users\Fabian\Desktop\stack\img\img0002.jpg
2 C:\Users\Fabian\Desktop\stack\img\img0003.jpg
....