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中的目录中查找具有特定文件扩展名的所有文件