gar*_*pak 97 python python-2.7 python-3.x
我需要使用python获取文件夹的最新文件.使用代码时:
max(files, key = os.path.getctime)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
FileNotFoundError:[WinError 2]系统找不到指定的文件:'a'
Mar*_*oon 259
分配给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
Run Code Online (Sandbox Code Playgroud)
glg*_*lgl 30
max(files, key = os.path.getctime)
Run Code Online (Sandbox Code Playgroud)
是完全不完整的代码.什么是files?它可能是一个文件名列表,来自os.listdir().
但是这个列表只列出了文件名部分(又名"basenames"),因为它们的路径很常见.为了正确使用它,你必须将它与通向它的路径相结合(并用于获取它).
如(未经测试):
def newest(path):
files = os.listdir(path)
paths = [os.path.join(path, basename) for basename in files]
return max(paths, key=os.path.getctime)
Run Code Online (Sandbox Code Playgroud)
Jam*_*ull 18
我一直在 Python 3 中使用它,包括文件名的模式匹配。
from pathlib import Path
def latest_file(path: Path, pattern: str = "*"):
files = path.glob(pattern)
return max(files, key=lambda x: x.stat().st_ctime)
Run Code Online (Sandbox Code Playgroud)
小智 14
我缺乏发表评论的声誉,但 Marlon Abeykoons 的回应并没有给我正确的结果。不过,使用 mtime 可以解决问题。(key=os.path.get m时间))
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.getmtime)
print(latest_file)
Run Code Online (Sandbox Code Playgroud)
我找到了这个问题的两个答案:
python os.path.getctime max 不返回最新 python - getmtime() 和 getctime() 在 unix 系统中的区别
Bre*_*dSP 12
我建议使用glob.iglob()而不是glob.glob(),因为它更有效。
glob.iglob() 返回一个迭代器,它产生与 glob() 相同的值,而不实际同时存储它们。
这意味着glob.iglob()效率会更高。
我主要使用以下代码来查找与我的模式匹配的最新文件:
LatestFile = max(glob.iglob(fileNamePattern),key=os.path.getctime)
注意:有max函数的变体,如果找到最新的文件,我们将使用以下变体:
max(iterable, *[, key, default])
需要迭代,所以你的第一个参数应该是可迭代的。在找到最大数量的情况下,我们可以使用以下变体:max (num1, num2, num3, *args[, key])
尝试按创建时间对项目进行排序。下面的示例对文件夹中的文件进行排序并获取最新的第一个元素。
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]
Run Code Online (Sandbox Code Playgroud)
大多数答案都是正确的,但如果有像获取最新的两个或三个最新的要求,那么它可能会失败或需要修改代码。
我发现下面的示例更有用且相关,因为我们也可以使用相同的代码来获取最新的 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
Run Code Online (Sandbox Code Playgroud)