【问题标题】:Delete oldest files in directory python3删除目录python3中最旧的文件
【发布时间】:2018-03-19 13:35:55
【问题描述】:

我正在编写一个数据记录程序(安全摄像头),我需要在磁盘已满之前删除文件夹中最旧的文件。将有数千个文件,重要的是任何排序功能都不会在理想情况下占用资源超过几秒钟。我已经阅读了几个想法,似乎很难让它们工作(我对 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/"

【问题讨论】:

  • os.listdir() 返回纯名称,而不是完全限定名称。如果路径是.,它将按原样工作,或者您可以添加更多魔法。
  • 也就是说,我不指望它能比os.walk() 给你买太多东西。您将节省一些函数调用开销,但这与 I/O 的成本相比微不足道。

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


【解决方案1】:

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

对您已经尝试的内容(不使用 Python 3 的任何新工具)进行天真的修改可能如下所示:

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

【讨论】:

    【解决方案2】:

    如果你有日志文件,你可以rotate他们。 logrotate 具有 maxagerotate 等选项,可帮助您自动删除。

    第二个选项是,如果您有文件,那么在终端中使用find 命令会更容易(编写shell scriptcronjob)来有效地执行此操作。

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

    os.path.getmtime(filename)
    

    这会为您提供filename 修改时间的timestamp,如果超过特定时间,您可以拉动timedelta 并删除。

    【讨论】:

      【解决方案3】:

      我遇到了同样的错误。 查尔斯达菲的答案对我不起作用,我不想编写外部脚本,所以写了这个:

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

      【讨论】:

        猜你喜欢
        • 2023-01-07
        • 2020-01-27
        • 2011-04-06
        • 2014-08-20
        • 2016-11-17
        • 2011-01-15
        • 2020-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多