Python 3.x 在遍历文件夹时正确排序JPG文件

Python 3.x 在遍历文件夹时正确排序JPG文件,python-3.x,sorting,Python 3.x,Sorting,我希望遍历文件夹中的一组JPG文件,并将这些JPG文件绑定到PDF中。每个JPG代表PDF中的一个有序页面,因此为了正确地将这些JPG绑定到PDF中,当我遍历文件夹时,必须对它们进行适当的排序 此文件夹中我的JPG文件结构如下所示: filename_1.jpg filename_2.jpg filename_3.jpg filename_4.jpg filename_5.jpg filename_6.jpg filename_7.jpg filename_8.jpg filename_9.jp

我希望遍历文件夹中的一组JPG文件,并将这些JPG文件绑定到PDF中。每个JPG代表PDF中的一个有序页面,因此为了正确地将这些JPG绑定到PDF中,当我遍历文件夹时,必须对它们进行适当的排序

此文件夹中我的JPG文件结构如下所示:

filename_1.jpg
filename_2.jpg
filename_3.jpg
filename_4.jpg
filename_5.jpg
filename_6.jpg
filename_7.jpg
filename_8.jpg
filename_9.jpg
filename_10.jpg
filename_11.jpg
filename_12.jpg
filename_13.jpg
filename_14.jpg
filename_15.jpg
其中,文件名末尾的数字表示PDF中的页码

当我执行以下操作以测试文件是否按正确顺序排序时:

for file in sorted(os.listdir(folder_path)):
    print(file)
排序
函数对文件结构排序时,我得到以下输出:

filename_1.jpg
filename_10.jpg
filename_11.jpg
filename_12.jpg
filename_13.jpg
filename_14.jpg
filename_15.jpg
filename_2.jpg
filename_3.jpg
filename_4.jpg
filename_5.jpg
filename_6.jpg
filename_7.jpg
filename_8.jpg
filename_9.jpg

虽然从字母数字的角度来看,这是正确的“排序”顺序,但它的页面顺序不正确,因此生成的PDF将无法正确排序。我知道如果我在每个一位数的页码文件前加上一个零,这将正常工作(即filename_01.jpg而不是filename_1.jpg),但是我在600多个jpg文件夹中有8000多个jpg文件,以这种方式转换所有这些一位数的页码文件对我来说不是一项简单的任务


是否有人建议我如何根据文件名末尾的页码对这些文件进行适当排序?

可能有一种更有效的方法,但如果您的文件名遵循发布的问题
.
中的格式,则可以:

files={int(file.split("_")[1].split(".")[0]) : file for file in sorted(os.listdir(folder_path))}
sorted_files=[files[file_key] for file_key in sorted(files.keys())]

基本上,您可以创建一个对应于映射到文件名的文件号的
int
键的字典,对键进行排序并从中获得值列表。

这回答了您的问题: