Python 3中取代dircache的方法是什么?

6
在我重新发明轮子之前,有没有人能告诉我是否有一个可直接替换(或半直接替换)单行语句的方案?
allfiles = dircache.listdir('.')

你可能相对容易地将Py2.7版本更新为Py3k:https://raw.githubusercontent.com/python/cpython/2.7/Lib/dircache.py - Bill Lynch
我有同样的问题,我不明白为什么在显然没有替代方案的情况下删除了dircache? - Alan Moore
2个回答

3

一行?不是的。但你可以只需执行以下操作:

global_cache = {}
def cached_listdir(path):
    res = global_cache.get(path)
    if res is None:
        res = os.listdir(path)
        global_cache[path] = res
    return res

1
只是补充一下那个答案,因为其他人可能通过搜索来到这里:https://pymotw.com/2/dircache/指出,当修改日期更改时,目录将被重新读取。但在这个实现中并没有发生这种情况。 - Dschoni

1
你可以使用functools.lru_cache
@lru_cache(32)
def cached_listdir(d):
     return os.listdir(d)

这不是完全相同的替换。Dschoni在 viraptors答案评论中发出的警告也适用于此:当修改日期更改时,目录不会被重新读取,因此如果从目录中添加或删除文件,则后续调用将不正确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接