删除目录python3中最旧的文件

删除目录python3中最旧的文件,python,python-3.x,file,sorting,delete-file,Python,Python 3.x,File,Sorting,Delete File,我正在写一个数据记录程序(安全摄像头),我需要在磁盘满之前删除文件夹中最旧的文件。将有数千个文件,重要的是,任何排序函数都不会占用资源超过几秒钟。我已经通读了几个想法,似乎很难让它们发挥作用(我对python有点陌生) 所以: 想知道os.walk在拥有数千个或上万个文件的列表时是否会相对缓慢 我对马特奥·戴尔·阿米科(Matteo Dell'Amico)的建议非常感兴趣(来自另一个网站): 我一直在获取FileNotFoundError:[Errno 2]。。。。。也许有人可以帮助解决这个问题

我正在写一个数据记录程序(安全摄像头),我需要在磁盘满之前删除文件夹中最旧的文件。将有数千个文件,重要的是,任何排序函数都不会占用资源超过几秒钟。我已经通读了几个想法,似乎很难让它们发挥作用(我对python有点陌生)

所以:
想知道os.walk在拥有数千个或上万个文件的列表时是否会相对缓慢

我对马特奥·戴尔·阿米科(Matteo Dell'Amico)的建议非常感兴趣(来自另一个网站):

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

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

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

您复制的代码正在从
os.listdir
检索裸名称,并将其直接传递到
os.path.getctime
。如果这些名称需要与您的
路径相结合才能工作,那么这就不能很好地工作

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

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

如果你有日志文件,你可以旋转它们
logrotate
具有类似于
maxage
rotate
的选项,可帮助您自动删除

第二种选择是,如果您有文件,那么在终端上使用
find
命令(编写
shell脚本
cronjob
)更容易有效地完成这项工作

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

os.path.getmtime(filename)
这将为您提供一个
文件名修改时间的
时间戳
,您可以打开
时间增量
,如果该时间早于指定时间,则将其删除。

我收到了相同的错误。 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'))

os.listdir()
返回空名称,而不是完全限定的名称。如果路径是
,它将按原样工作,或者您可以添加一点魔力。也就是说,我不希望它能为您购买过多的
os.walk()
。您将节省一些函数调用开销,但与I/O成本相比,这算不了什么。
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'))