获取目录列表比在子进程中调用“ls”更快的方法

时间:2011-07-27 18:00:54

标签: python performance directory-listing

在搜索和一些测试运行之后,os.popen()+ read()和subprocess.check_output()似乎几乎等同于读出文件夹的内容。有没有办法改进os.popen()+ read()或subprocess.check_output()的组合?我必须ls许多文件夹并读取输出,并且使用上述任何一种都是类似的,但根据分析结果表示主要瓶颈。

3 个答案:

答案 0 :(得分:5)

您正在寻找os.listdir和/或os.walk,也许还有os.stat系列功能。这些是(Python绑定)ls使用它们的相同基元,所以你可以通过解析ls的输出来做这些事情。我建议您仔细阅读osos.pathstat模块提供的所有内容;可能还有其他事情你不需要外部程序来做。

你可能还应该阅读stat, the underlying system call的文档 - 它是面向C的,但它会帮助你理解os.stat的作用。

答案 1 :(得分:2)

为什么不直接用os.listdir阅读目录内容?你为什么需要炮轰ls?如果除了文件名之外还需要有关文件的更多信息,还可以使用os.stat。自己进行系统调用比创建子进程更有效率。

对于完全目录遍历,有os.walkshutil module也有一些有用的功能。

答案 2 :(得分:0)

使用glob:

>>> from glob import glob
>>> glob('*')

语法相同。

e.g。

glob('*.txt')  # the same as "ls *.txt"