0

我正在尝试将文件夹中的所有 .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")]))
4

2 回答 2

2

首先,您可以使用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]))
于 2020-08-30T22:51:40.283 回答
1

如果我没记错的话,os.listdir默认返回一个按名称排序的列表。如果要按上次修改时间对它们进行排序,可以使用os.getmtime作为键对它们进行排序:

#import img2pdf
#import os

os.chdir('C:/Path')
paths = sorted(os.listdir('.'), key=os.path.getmtime)

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

有关更多信息,请参阅文档:https ://docs.python.org/3/library/os.path.html

os.path.getmtime(路径)

  • 返回上次修改路径的时间。返回值是一个浮点数,给出自纪元以来的秒数(参见时间模块)。如果文件不存在或不可访问,则引发 OSError。
于 2020-08-30T22:17:38.973 回答