有没有办法在导入文件进入循环之前对其进行排序?
Is there a way to order imported files before they are brought into a loop?
我正在尝试将文件夹中的所有 .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")]))
如果我没记错的话,os.listdir
returns 默认是一个 name-sorted 列表。如果你想按最后修改时间排序,你可以使用 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(path)
- Return the time of last modification of path. The return value is a floating point number giving the number of seconds since the epoch (see the time module). Raise OSError if the file does not exist or is inaccessible.
首先,您可以使用glob
将您目录中files
的所有路径收集到一个列表中。然后用os
模块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]))
我正在尝试将文件夹中的所有 .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")]))
如果我没记错的话,os.listdir
returns 默认是一个 name-sorted 列表。如果你想按最后修改时间排序,你可以使用 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(path)
- Return the time of last modification of path. The return value is a floating point number giving the number of seconds since the epoch (see the time module). Raise OSError if the file does not exist or is inaccessible.
首先,您可以使用glob
将您目录中files
的所有路径收集到一个列表中。然后用os
模块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]))