如何从python中的文件夹中检索最新的文件

时间:2015-09-06 16:21:49

标签: python

我正在尝试检索目录中添加或修改的最新文件。我在其中一个论坛上获得的代码使用以下方法:

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'

使用上面显示的最新文件的名称。所以它找到了文件,但可能是什么问题。请帮忙

3 个答案:

答案 0 :(得分:2)

  1. 您应使用os.path.isfile(x)而不是filter

  2. filelist = [f for f in filelist if os.path.isfile(f)] 已弃用;列表推导是首选:

    os.listdir
  3. 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)

  4. 之类的操作

    所以修好它应该看起来像:

    {{1}}

答案 1 :(得分:0)

os.listdir()不包括您在返回的路径中列出的目录。因此,在致电os.chdir("MYDIRECTORY")之前,您必须先os.stat(x),或者在os.stat("MYDIRECTORY/" + x)之前添加目录名称。

预先chdirlistdiros.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中的过滤器/地图更快。