首页 > 解决方案 > 有没有办法在导入的文件进入循环之前对其进行排序?

问题描述

我正在尝试将文件夹中的所有 .job 文件转换为单个 pdf。这段代码可以做到这一点,但是它们没有特定的顺序。我希望它们按照文件创建时间的顺序导入,或者它们的文件名遵循设置模式“XXX_1.jpg”

这是我到目前为止所拥有的:

import img2pdf
os.chdir('C:/Path')
# convert all files ending in .jpg inside a directory

with open("output.pdf", "wb") as f:
    f.write(img2pdf.convert([i for i in os.listdir('.') if i.endswith(".jpg")]))

标签: pythonloopsfile-conversionimg2pdf

解决方案


首先,您可以使用glob将目录中的所有路径收集files到一个列表中。然后使用osmodule getctime,您可以获得创建时间的列表。我压缩了两个列表,然后制作了一个字典,其键是文件路径和值 - 创建时间。最后,我使用运算符模块按值排列字典,以按值的降序排列所有字典(即最新文件优先)

import os
import glob
import operator
import img2pdf

a= glob.glob("my_directory/*.jpg")
b = [os.path.getctime(i) for i in a]
c = {}
for i,j  in list(zip(a,b)):
    c[i] = j
sorted_c = dict(sorted(c.items(), key=operator.itemgetter(1),reverse=True))
with open("output.pdf", "wb") as f:
    f.write(img2pdf.convert([k for k in sorted_c]))

推荐阅读