使os.listdir()列出完整路径
考虑以下这段代码:
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.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']
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)))
这段代码的作用是...
首先,它会...
接着,它会检查...
如果条件满足,它就会...
最后,代码会返回...
总的来说,这段代码的目的是...
希望这个解释能帮助你更好地理解这段代码!