我正在编写数据记录程序(安全摄像头),我需要在磁盘已满之前删除文件夹中最旧的文件。将有数千个文件,重要的是任何排序功能都不会理想地占用资源超过几秒钟。我已经阅读了几个想法,似乎无法让它们工作(我对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/"
答案 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)
如果您有日志文件,可以rotate
。 logrotate
包含maxage
和rotate
等可帮助您自动删除的选项。
第二个选项是,如果你有文件,只需使用find
命令和终端(写shell script
和cronjob
)就可以更有效地执行此操作。
第三个选项是,使用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'))