在Python中更快查找所有子目录的os.walk替代方法/用法

1 投票
1 回答
3812 浏览
提问于 2025-04-16 11:15

根据我在网上和这里的讨论,os.walk 是查找一个目录下所有子目录和文件的好方法。但我想问的是,如果我想递归地找到所有的子目录,那么使用 os.walk 是不是最快的解决方案呢?

另外,我想问的是,因为调用 os.walk 的时候是 for root, dirs, files in os.walk(path),那么如果我不需要文件,os.walk 会不会还是查看所有的文件呢?

目前,我的代码是:

for root, dirs, files in os.walk(path):
    for x in dirs:
        DoStuffHere

不过在一个有很多子目录和文件的文件夹里,它的速度似乎很慢。

谢谢。

1 个回答

2

我对这个问题的所有细节不是百分之百确定,但根据我的理解:

一般来说,文件列表已经包含在目录的元数据里,所以当你查看一个目录时,这些数据已经存在了(在Linux系统上是这样,不确定Windows是否也是)。这意味着使用os.walk可能是最快、最简单的方法。

另外,在没有进行性能分析的情况下,你知道os.walk真的就是导致慢的地方吗?记住,一般的建议是先把你的应用程序或项目写出来,如果运行得太慢,再开始分析性能,找出慢的部分,然后进行优化等等……

使用os.walk时,我可以在几秒钟内遍历几千个目录和七万多个文件,所以这应该足够快,能够满足你的需求。

撰写回答