1

我试图找到一种最佳方式来提取最近使用 Python 从目录树中创建的文件,比如 10 个。我找到了许多[1, 2] 有趣的解决方案,但是,它们只涉及一个文件。

                      ├── d1
                      │   ├── d1-1
                      │   ├── d1-1
                      :
                      ├── d2
                      │   ├── d2-1
                      │   └── d2-2
                      │   │   ├── f1.xxx
                      : :
                      │   │   ├── fn.xxx
                      ├── d3
                      │   ├── d3-1
                      :
                      :

目前,我能想到的唯一方法是通过循环遍历同一棵树来迭代地附加结果,直到我想要 10 个结果;这种方法的问题在于它显然会很耗时......尤其是我的目录树可能很大。我想到的另一种解决方案涉及解析整个目录树并生成具有相应创建或修改日期的文件名路径,然后可能使用该“索引”文件来获取前 10 个最近的文件。数据库在这里可能会很有用,但是,目前它不是一个选择。

有谁知道实现这一目标的最佳方法?

[1] Python 返回存储在目录中的最新 csv 文件的文件路径/文件名
[2]在目录中查找最新文件而不读取其所有内容

4

2 回答 2

4

您可以编写一个生成器函数来返回创建时间和文件名,并使用该heapq模块相当有效地自动跟踪最新的“n”条目 - 例如:

import os
import heapq

def iterfiles(root):
    for base, dirs, files in os.walk(root):
        for filename in files:
            fullname = os.path.join(base, filename)
            yield os.stat(fullname).st_ctime, fullname

print heapq.nlargest(10, iterfiles('some path here'))

IOError顺便说一句 - 如果权限不可用于统计文件,您可能必须处理(尝试/除了产量)。

于 2012-10-06T11:42:12.323 回答
1
import os
import heapq

basedir = ???

files = (os.path.join(x[0], fn) for x in os.walk(basedir) for fn in x[2])
print heapq.nlargest(10, files, key=lambda x:os.stat(x).st_ctime)
于 2012-10-06T11:57:08.757 回答