使os.listdir()列出完整路径

21

请考虑以下代码片段:

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'

是否有解决此问题的方法,还是我需要编写自己的排序函数?

6个回答

29
你可以使用 glob
import os
from glob import glob
glob_pattern = os.path.join('dumps', '*')
files = sorted(glob(glob_pattern), key=os.path.getctime)

1
全局变量拯救了我们。 - william_grisaitis

9
files = sorted(os.listdir('dumps'), key=lambda fn:os.path.getctime(os.path.join('dumps', fn)))

5
files = sorted([os.path.join('dumps', file) for file in os.listdir('dumps')], key=os.path.getctime)

1

如何使用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()以返回字符串列表。


1

你也可以在Python中使用os.path.joinos.path.abspath结合maplambda来完成相应的操作。

>>>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']

-2

以下是另一种解决方案,返回一个np数组而不是列表,如果对某人更好。仍然使用os

import numpy as np
import os

NPFileListFullURL=np.char.add(Folder_Path, os.listdir(Folder_Path))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接