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

23 投票
6 回答
38945 浏览
提问于 2025-04-19 18:11

考虑以下这段代码:

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 个回答

1

在Windows上使用Python 3.9的pathlib获取一个目录中所有文件的绝对路径

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']
5
files = sorted([os.path.join('dumps', file) for file in os.listdir('dumps')], key=os.path.getctime)

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

30

你可以使用 glob 这个库。

import os
from glob import glob
glob_pattern = os.path.join('dumps', '*')
files = sorted(glob(glob_pattern), key=os.path.getctime)
9
files = sorted(os.listdir('dumps'), key=lambda fn:os.path.getctime(os.path.join('dumps', fn)))

这段代码的作用是...

首先,它会...

接着,它会检查...

如果条件满足,它就会...

最后,代码会返回...

总的来说,这段代码的目的是...

希望这个解释能帮助你更好地理解这段代码!

撰写回答