Python获取具有特定扩展名的目录中的最新文件

Posted

技术标签:

【中文标题】Python获取具有特定扩展名的目录中的最新文件【英文标题】:Python get most recent file in a directory with certain extension 【发布时间】:2014-07-30 19:58:52 【问题描述】:

我正在尝试使用“上传”目录中带有“.log”扩展名的最新文件来由 Python 处理。我使用Ubuntu Web 服务器,文件上传是通过 html 脚本完成的。上传的文件由 Python 脚本处理,结果写入mysql 数据库。我的代码使用了this 答案。

import glob
newest = max(glob.iglob('upload/*.log'), key=os.path.getctime)
print newest
f = open(newest,'r')

但这不是获取目录中的最新文件,而是获取最旧的文件。为什么?

【问题讨论】:

尝试min 而不是max - 逻辑上的reverse 当我从 python 交互式控制台运行它时,这给了我最新的文件。 想一想,你可能想要os.path.getmtime - 虽然创建时间和修改时间不同......所以呃......不确定 @Jon Clements:哇...... @Jon Clements:你能把这个作为答案吗?所以我可以接受。 【参考方案1】:

问题是max的逻辑逆是min

newest = max(glob.iglob('upload/*.log'), key=os.path.getctime)

为了您的目的应该是:

newest = min(glob.iglob('upload/*.log'), key=os.path.getctime)

【讨论】:

新手寻找一种方法来识别最新文件需要小心,因为 max getctime 应该是最新的日期,因此是最新的。我发现 max 在 AMD64 和树莓派上提供了 linux 上的最新文件。想知道这里发生了什么。 @Paul 确实...我记得当我回答这个问题时认为 OP 的方法是正确的,并建议 min 而不是 max 真的是一个建议,看看他们是否想要最旧的(或者只是为了看看相反的是否是他们真正想要的)...... @JonClements 嗨,我正在做类似的事情,获取某种文件格式,它必须是最新的并且在目录中。想知道是否有任何方法可以只使用os 模块而不使用glob @Yan 我想你可以看看使用os.listdir(),但是你必须自己做模式匹配.. 似乎每个结果都适用于特定的操作系统。警告人们可能是个好主意。你的回答让我花了很多时间弄清楚我做错了什么,只是为了意识到第一个选项对我有用。【参考方案2】:

在许多较新的程序中,最好使用 pathlib 来完成这个非常常见的任务:

from pathlib import Path

XLSX_DIR = Path('../../somedir/')
XLSX_PATTERN = r'someprefix*.xlsx'

latest_file = max(XLSX_DIR.glob(XLSX_PATTERN), key=lambda f: f.stat().st_ctime)

【讨论】:

以上是关于Python获取具有特定扩展名的目录中的最新文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中的目录中查找具有特定文件扩展名的所有文件

递归查找具有特定扩展名的文件

如何获取给定文件夹中具有特定扩展名的文件列表?

如何获取给定文件夹中具有特定扩展名的文件列表?

在 Objective-C 中的指定路径获取具有特定扩展名的文件列表

搜索包含列表中的单词并具有特定文件扩展名的文件名