数组中的图像顺序不正确



我只是想从forder中的图像列表中创建一个pdf。这是代码:

file_path = input('file path of the images: ')
list = os.listdir(file_path)
pdfimages = [
Image.open(file_path + f)
for f in list
]
print('=== Images used to create the PDF ===n' +'>>> '+str(list))
pdf_path = file_path + pdf_name + '.pdf'
pdfimages[0].save(
pdf_path, "PDF" , resolution=100.0, save_all=True, append_images=pdfimages[1:]
)
print('=== PDF created and saved! ===')
print('=== Check ===n' +'>>> '+str(file_path))

pdf已创建,但照片的顺序(此处选中:print('=== Images used to create the PDF ===n' +'>>> '+str(list))(不正确,即使它在文件夹中是正确的。这就是之前编写的代码所显示的内容:

=== Images used to create the PDF ===
>>> ['bho1.jpg', 'bho10.jpg', 'bho11.jpg', 'bho12.jpg', 'bho13.jpg', 'bho14.jpg', 'bho15.jpg', 'bho16.jpg', 'bho17.jpg', 'bho18.jpg', 'bho19.jpg', 'bho2.jpg', 'bho20.jpg', 'bho21.jpg', 'bho22.jpg', 'bho23.jpg', 'bho24.jpg', 'bho25.jpg', 'bho26.jpg', 'bho27.jpg', 'bho28.jpg', 'bho29.jpg', 'bho3.jpg', 'bho30.jpg', 'bho31.jpg', 'bho32.jpg', 'bho33.jpg', 'bho34.jpg', 'bho35.jpg', 'bho36.jpg', 'bho37.jpg', 'bho38.jpg', 'bho39.jpg', 'bho4.jpg', 'bho40.jpg', 'bho41.jpg', 'bho42.jpg', 'bho43.jpg', 'bho44.jpg', 'bho45.jpg', 'bho46.jpg', 'bho47.jpg', 'bho48.jpg', 'bho49.jpg', 'bho5.jpg', 'bho50.jpg', 'bho51.jpg', 'bho52.jpg', 'bho53.jpg', 'bho54.jpg', 'bho55.jpg', 'bho56.jpg', 'bho57.jpg', 'bho58.jpg', 'bho59.jpg', 'bho6.jpg', 'bho60.jpg', 'bho7.jpg', 'bho8.jpg', 'bho9.jpg']

正如你所看到的,这个模式不是bho1.jpg, bho2.jpg, bho3.jpg etc...,相反,它首先得到一个(bho1.jpg, bho10.jpg, bho11.jpg, bho12.jpg etc...(的图像,而不是两个,然后像这样变成一个。有人知道为什么?

这主要是因为您处理的是字符串,所以它们是按字母顺序排序的。

我会说从每个字符串中解析数字。您可以用一个简单的int(filename[3:-4])来实现这一点,并使用这些整数值对文件名进行排序。完整的,你可以这样:

file_names = os.listdir(file_path)
file_names = sorted(file_names, key=lambda s: int(s[3:-4]))

您也可以使用regex来解析整数,但在您的情况下,您也可以通过索引([3:-4](来进行解析。

我还冒昧地将您的list变量重命名为file_name,list是python中的保留变量,不应该更改。

最新更新