我正在尝试在文件夹中循环播放一系列jpg文件。我找到了示例代码:
for n, image_file in enumerate(os.scandir(image_folder)):
,它将循环遍历image_folder
中的图像文件。但是,似乎没有遵循任何顺序。我的文件名类似000001.jpg
,000002.jpg
,000003.jpg
等。但是当代码运行时,它没有遵循以下顺序:
000213.jpg
000012.jpg
000672.jpg
....
这里似乎是什么问题?
答案 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
....