我正在尝试检索目录中添加或修改的最新文件。我在其中一个论坛上获得的代码使用以下方法:
import os
filelist = os.listdir('MYDIRECTORY')
filelist = filter(lambda x: not os.path.isdir(x), filelist)
newest = max(filelist, key=lambda x: os.stat(x).st_mtime)
我把我的目录放在那里,它给了我以下错误:
Traceback (most recent call last):
File "test.py", line 8, in <module>
newest = max(filelist, key=lambda x: os.stat(x).st_mtime)
File "test.py", line 8, in <lambda>
newest = max(filelist, key=lambda x: os.stat(x).st_mtime)
OSError: [Errno 2] No such file or directory: 'NAME OF FILE'
使用上面显示的最新文件的名称。所以它找到了文件,但可能是什么问题。请帮忙
答案 0 :(得分:2)
您应使用os.path.isfile(x)
而不是filter
。
filelist = [f for f in filelist if os.path.isfile(f)]
已弃用;列表推导是首选:
os.listdir
os.path.join('MYDIRECTORY', f)
只提供目录中项目的名称,而不是完整路径。要获得完整路径,您需要执行import os
rootpath = 'MYDIRECTORY'
filelist = [os.path.join(rootpath, f) for f in os.listdir(rootpath)]
filelist = [f for f in filelist if os.path.isfile(f)]
newest = max(filelist, key=lambda x: os.stat(x).st_mtime)
。
所以修好它应该看起来像:
{{1}}
答案 1 :(得分:0)
os.listdir()
不包括您在返回的路径中列出的目录。因此,在致电os.chdir("MYDIRECTORY")
之前,您必须先os.stat(x)
,或者在os.stat("MYDIRECTORY/" + x)
之前添加目录名称。
预先chdir
或listdir
在os.listdir(".")
当前目录中使用geom_text
。
答案 2 :(得分:0)
问题在于os.listdir
returns file names, not paths。虽然看起来下一个命令(在os.path.isdir
上过滤)只能给出名称,但是当没有该名称的对象存在时,您应该注意isdir
返回False
。
您需要做的是将路径与文件名结合起来:
import os
dirname = 'MYDIRECTORY'
filenames = os.listdir(dirname)
filepaths = [os.path.join(dirname, filename) for filename in filenames]
files = [f for f in filepaths if not os.path.isdir(f)]
newest = max(files, key=lambda x: os.stat(x).st_mtime)
请注意,我使用列表推导替换了过滤器调用。这被认为是更多'Pythonic'(eww),但我这样做是因为列表推导通常比Python中的过滤器/地图更快。