删除目录python3中最旧的文件

时间:2017-10-08 05:38:57

标签: python python-3.x file sorting delete-file

我正在编写数据记录程序(安全摄像头),我需要在磁盘已满之前删除文件夹中最旧的文件。将有数千个文件,重要的是任何排序功能都不会理想地占用资源超过几秒钟。我已经阅读了几个想法,似乎无法让它们工作(我对python有点新鲜)。

所以:
想知道os.walk是否会因数千或数万个文件的列表而变得相对较慢?

我对Matteo Dell和Amico的建议(来自其他网站)非常感兴趣:

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

我一直得到FileNotFoundError:[Errno 2] .....也许有人可以帮助解决这个问题所需的语法? 最后,我确信有多种方法可以做到这一点,但我更喜欢最有效的系统资源方式。非常感谢!

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

import os
path = "home/pi/Desktop/images/"

3 个答案:

答案 0 :(得分:1)

您复制的代码是从os.listdir检索裸名称,并将它们直接传递给os.path.getctime。如果这些名称需要与您的path结合使用,则效果不佳。

对您正在尝试的内容(不使用任何Python 3新功能)的简单修改可能如下所示:

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

答案 1 :(得分:0)

如果您有日志文件,可以rotatelogrotate包含maxagerotate等可帮助您自动删除的选项。

第二个选项是,如果你有文件,只需使用find命令和终端(写shell scriptcronjob)就可以更有效地执行此操作。

第三个选项是,使用python代码:

os.path.getmtime(filename)

这为timestamp提供了filename的修改时间,您可以启用timedelta并删除超过特定时间的时间。

答案 2 :(得分:0)

我得到了同样的错误。 Charles Duffy的答案对我不起作用,我不想写外部脚本,所以写了这个:

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'))