Python, 如果 Windows10 文件夹包含超过 10000 个文件,则删除最早的 2000 个文件



我知道在NTFS中,一个文件夹中可能有4,294,967,295个文件,而且这些文件很多,但是我会以某种方式控制文件夹中的这个数量的文件(在我的情况下d:/screen/work/(,每分钟保存60张图像。 我如何使用 Python 来做到这一点?我能够找到一个解决方案(如下(只是为了删除旧文件(在下面的代码中超过 7 天( 但是不知道如果文件夹包含超过"y"个文件(例如 10000(,如何删除最新的"n"个最旧的文件(例如 2000(。

from pathlib import Path
import arrow
import os
import sys
filesPath = r"d:/screen/work/"
criticalTime = arrow.now().shift(hours=+5).shift(days=-7)
for item in Path(filesPath).glob('*'):
if item.is_file():
itemTime = arrow.get(item.stat().st_mtime)
if itemTime < criticalTime:
os.remove(str(item.absolute()))
print(str(item.absolute()))
pass

一个简单的解决方案很简单,只需创建一个新dict并将item.absolute()itemTime.timestamp添加为键值对

x[str(item.absolute())] = itemTime.timestamp

然后按值排序,

items_sorted = {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}

并循环访问前len(dict)-n

from pathlib import Path
from itertools import islice
import arrow
import os
import sys
x = {}
n = 10
filesPath = r"d:/screen/work/"
criticalTime = arrow.now().shift(hours=+5).shift(days=-7)
for item in Path(filesPath).glob('*'):
if item.is_file():
itemTime = arrow.get(item.stat().st_mtime)
if itemTime < criticalTime:
x[str(item.absolute())] = itemTime.timestamp

items_sorted = {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
for path, itemTime in islice(items_sorted.items(), len(x)-n):
os.remove(str(item.absolute()))
print(path)

此外,此解决方案无法在大量文件上很好地缩放。对整个字典进行排序可能既耗时又效率低下,但更好的方法会复杂得多

最新更新