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

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

我得到以下错误:

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


当前回答

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

是相当不完整的代码。什么是文件?它可能是一个文件名列表,来自os.listdir()。

但此列表仅列出文件名部分(a.k.a.)。“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)

其他回答

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

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]

在windows上有一个更快的方法(0.05s),调用一个bat脚本来做这个:

get_latest.bat

@echo off
for /f %%i in ('dir \\directory\in\question /b/a-d/od/t:c') do set LAST=%%i
%LAST%

其中\\ question中的\\directory\是您想要调查的目录。

get_latest.py

from subprocess import Popen, PIPE
p = Popen("get_latest.bat", shell=True, stdout=PIPE,)
stdout, stderr = p.communicate()
print(stdout, stderr)

如果它找到一个文件,stdout是路径,stderr是None。

使用stdout.decode("utf-8").rstrip()来获得文件名的可用字符串表示。

我一直在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)
max(files, key = os.path.getctime)

是相当不完整的代码。什么是文件?它可能是一个文件名列表,来自os.listdir()。

但此列表仅列出文件名部分(a.k.a.)。“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)

我缺乏评论的声誉,但ctime从Marlon Abeykoons的回应没有给我正确的结果。使用时光网就可以了。(关键= os.path.getmtime))

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)

对于这个问题,我找到了两个答案:

Python os.path.getctime Max不返回latest unix系统中python - getmtime()和getctime()的区别