我正在写一个数据记录程序(安全摄像头),我需要删除文件夹中最早的文件(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/"
您复制的代码是从检索裸os.listdir
名称,并直接通过他们os.path.getctime
。这不工作这么好,如果那些名称必须与您的path
工作相结合。
一个天真的修改,你已经想什么(不使用新到Python 3的任何设施)可能看起来像:
min(os.listdir(path), key=lambda p: os.path.getctime(os.path.join(path, p)))
如果有日志文件,你可以rotate
他们。 logrotate
有像maxage
和服务,帮助您自动删除rotate
选项。
第二个选择是,如果你有文件,它只是更容易使用find
命令终端(写shell script
和cronjob
)内有效地做到这一点。
第三种选择是,使用Python代码:
os.path.getmtime(filename)
这给你的timestamp
的修改时间filename
,巫婆你可以拉一个timedelta
,如果不是特定的时间早删除。
我得到了同样的错误。查尔斯·达菲的回答并没有为我工作,我不想写外部脚本,所以写了这个:
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'))