我需要使用python获取文件夹的最新文件。在使用代码时:

max(files, key = os.path.getctime)

我得到以下错误:

FileNotFoundError: [WinError 2] The system cannot find The file specified: 'a'


当前回答

大多数答案是正确的,但如果有一个要求,如获得最新的2或3个,那么它可能会失败或需要修改代码。

我发现下面的示例更有用和相关,因为我们可以使用相同的代码来获得最新的2,3和n个文件。

import glob
import os

folder_path = "/Users/sachin/Desktop/Files/"
files_path = os.path.join(folder_path, '*')
files = sorted(glob.iglob(files_path), key=os.path.getctime, reverse=True) 
print (files[0]) #latest file 
print (files[0],files[1]) #latest two files

其他回答

尝试按创建时间对项目进行排序。下面的例子对文件夹中的文件进行排序,并获取最新的第一个元素。

import glob
import os

files_path = os.path.join(folder, '*')
files = sorted(
    glob.iglob(files_path), key=os.path.getctime, reverse=True) 
print files[0]

赋给files变量的值是不正确的。使用下面的代码。

import glob
import os

list_of_files = glob.glob('/path/to/folder/*') # * means all if need specific format then *.csv
latest_file = max(list_of_files, key=os.path.getctime)
print(latest_file)

大多数答案是正确的,但如果有一个要求,如获得最新的2或3个,那么它可能会失败或需要修改代码。

我发现下面的示例更有用和相关,因为我们可以使用相同的代码来获得最新的2,3和n个文件。

import glob
import os

folder_path = "/Users/sachin/Desktop/Files/"
files_path = os.path.join(folder_path, '*')
files = sorted(glob.iglob(files_path), key=os.path.getctime, reverse=True) 
print (files[0]) #latest file 
print (files[0],files[1]) #latest two files

我建议使用glob.iglob()而不是glob.glob(),因为它更有效。

返回一个迭代器,该迭代器产生与glob()相同的值,但实际上不会同时存储它们。

这意味着glob.iglob()将更有效。

我主要使用下面的代码来查找与我的模式匹配的最新文件:

最后文件= max(filenameb),key=os.path.get时间)


注意: max函数有多种变体,为了找到最新的文件,我们将使用下面的变体: Max (iterable, *[, key, default])

它需要iterable所以你的第一个参数应该是iterable。 在寻找最大nums的情况下,我们可以使用下面的变体:max (num1, num2, num3, *args[, key])

我尝试使用上面的建议,我的程序崩溃了,然后我发现我试图识别的文件被使用了,当我尝试使用'os.path. path. path. path时。Getctime '它崩溃了。 最后对我有用的是:

    files_before = glob.glob(os.path.join(my_path,'*'))
    **code where new file is created**
    new_file = set(files_before).symmetric_difference(set(glob.glob(os.path.join(my_path,'*'))))

这段代码获得了两组文件列表之间的不常见对象 它不是最优雅的,如果同时创建多个文件,它可能不会稳定