删除目录python3最旧的文件

问题描述 投票:1回答:3

我正在写一个数据记录程序(安全摄像头),我需要删除文件夹中最早的文件(S)之前的磁盘已满。将有成千上万的文件,这是重要的,任何排序功能是不会理想的占用资源,更多则几秒钟。我已经通过了一些想法阅读并似乎有麻烦他们的工作(我有点新的Python)。

所以: 想知道如果os.walk会与的数以千计的文件数千或数万的列表比较慢?

我很利玛窦Dell'Amico的建议(从其他网站)很感兴趣:

min(os.listdir(path), key=os.path.getctime)
max(os.listdir(path), key=os.path.getctime)

我不断收到FileNotFoundError:[错误2] .....也许有人可以一起解决这个问题所需的语法帮助吗?最后,我敢肯定有这样做的多种方法,但我宁愿对系统资源的最有效方式。非常感谢!

编辑:我试过,包括在顶部:

import os
path = "home/pi/Desktop/images/"
python python-3.x file sorting delete-file
3个回答
1
投票

您复制的代码是从检索裸os.listdir名称,并直接通过他们os.path.getctime。这不工作这么好,如果那些名称必须与您的path工作相结合。

一个天真的修改,你已经想什么(不使用新到Python 3的任何设施)可能看起来像:

min(os.listdir(path), key=lambda p: os.path.getctime(os.path.join(path, p)))

0
投票

如果有日志文件,你可以rotate他们。 logrotate有像maxage和服务,帮助您自动删除rotate选项。

第二个选择是,如果你有文件,它只是更容易使用find命令终端(写shell scriptcronjob)内有效地做到这一点。

第三种选择是,使用Python代码:

os.path.getmtime(filename)

这给你的timestamp的修改时间filename,巫婆你可以拉一个timedelta,如果不是特定的时间早删除。


0
投票

我得到了同样的错误。查尔斯·达菲的回答并没有为我工作,我不想写外部脚本,所以写了这个:

oldest_file = min(os.listdir(path), key=lambda x: datetime.datetime.strptime(time.ctime(os.path.getctime(os.path.join(path, x))), '%a %b %d %H:%M:%S %Y'))
© www.soinside.com 2019 - 2024. All rights reserved.