请考虑以下代码片段:
files = sorted(os.listdir('dumps'), key=os.path.getctime)
目标是根据创建时间对列出的文件进行排序。但是由于os.listdir仅提供文件名而不是绝对路径,因此键即os.path.getctime会引发异常,显示:
OSError: [Errno 2] No such file or directory: 'very_important_file.txt'
是否有解决此问题的方法,还是我需要编写自己的排序函数?
import os
from glob import glob
glob_pattern = os.path.join('dumps', '*')
files = sorted(glob(glob_pattern), key=os.path.getctime)
files = sorted(os.listdir('dumps'), key=lambda fn:os.path.getctime(os.path.join('dumps', fn)))
files = sorted([os.path.join('dumps', file) for file in os.listdir('dumps')], key=os.path.getctime)
如何使用pathlib
在Windows上使用python3.9获取目录中所有文件的绝对路径列表
from pathlib import Path
# directory name is 'dumps'
[str(child.resolve()) for child in Path.iterdir(Path('dumps'))]
Path.iterdir()
接受一个pathlib
对象,因此我们使用Path(dir)
来获得该对象。它然后将每个文件作为child
输出,但是作为相对路径。 child.resolve()
给出绝对路径,但再次作为pathlib
对象,因此我们在其上执行str()
以返回字符串列表。
你也可以在Python中使用os.path.join
和os.path.abspath
结合map
和lambda
来完成相应的操作。
>>>list(map(lambda x: os.path.join(os.path.abspath('mydir'), x),os.listdir('mydir')))
mydir
的绝对路径和os.listdir('mydir')
。
输出结果:['/home/ahmad/Desktop/RedBuffer/Testdata/testing.avi',
'/home/ahmad/Desktop/RedBuffer/Testdata/testing2.avi',
'/home/ahmad/Desktop/RedBuffer/Testdata/text_changing.avi',
'/home/ahmad/Desktop/RedBuffer/Testdata/text_static.avi',
'/home/ahmad/Desktop/RedBuffer/Testdata/test_img.png']
以下是另一种解决方案,返回一个np数组而不是列表,如果对某人更好。仍然使用os
import numpy as np
import os
NPFileListFullURL=np.char.add(Folder_Path, os.listdir(Folder_Path))