我正在编写一个程序,对于目录中的所有文件(101个文件已按顺序命名为0.jpg到100.jpg)打开文件,根据比例调整大小,然后根据枚举的for循环索引将输出保存在不同的目录中。我很困惑为什么我的索引和文件名没有匹配。 for循环的索引从0到100运行,文件名也是如此。 for循环应按顺序从0到100调用源图像文件,并因索引而按顺序保存它们。
但是,当我运行程序时,源图像100(应该是最大的已调整大小的图像)现在保存为3.jpg并且是第四个最小的图像。什么是图像3现在是图像24.可能由此产生更多变化。但是,在较大的图像中,顺序是正确的。
这是我的代码:
"seeders-path": process.env.NODE_ENV === 'development'?
"seeders/development" :
"seeders/production"
我甚至确保对文件进行排序。比率和索引都正确打印。这里发生了什么?
答案 0 :(得分:1)
os.listdir
可能无法返回正确排序的图书。您应该在迭代之前对数组进行排序。更好的方法是使用原始文件名而不是迭代器。
您可以尝试使用array.sort()
函数的以下代码。
try:
files = os.listdir(os.path.join(os.getcwd(),"source images"))
files.sort()
except IOError:
print('No folder found.')
input('Enter any key to exit: ')
exit()
2017年2月26日更新
我已在计算机中测试了您的代码。我发现我在sort()
犯了一个错误。
这是控制台在整个迭代过程中打印参数。
file = 0.png
index = 0
file = 1.png
index = 1
file = 10.png
index = 2
file = 11.png
index = 3
file = 12.png
index = 4
file = 13.png
index = 5
file = 14.png
index = 6
file = 2.png
index = 7
file = 3.png
index = 8
sort()
函数的问题是函数总是按字符比较字符串。因此,结果将与索引不匹配。
我对你的代码做了一些改动。它在我的计算机中工作以产生预期的结果。
for index, file in enumerate(files):
path = os.path.join(os.getcwd(), "source images", file)
img = Image.open(path)
# do your operation
# Use the file name itself instead of the index
img.save("resized images/"+ file, 'JPEG')