Python3 - 迭代Linux目录而不创建列表

时间:2018-05-04 15:42:47

标签: python linux python-3.x loops

民间: 我开始学习Python;但是,我需要循环遍历目录的内容。

我不想将目录的内容啜饮到一个数组中,然后在x'中使用' for i循环它。循环,但循环通过目录处理程序。我知道内存中的数组会更快;但是,我对即兴创作用户空间的空间数量有限。在记忆中。

由于后者,我希望循环遍历目录本身。在Python3 for Linux中执行此操作的最佳方法是什么?因为我正在学习,所以我非常感谢示例代码。

-73

1 个答案:

答案 0 :(得分:1)

您不能使用os.listdir,因为它返回list,但您可以使用scandir返回迭代器。迭代器不会加载目录内容,而是逐个生成文件。它不会消耗尽可能多的os.listdir内存,你可以在需要时停止它。

  

os.scandir(路径='&#39)

     

返回与path给出的目录中的条目对应的os.DirEntry对象的迭代器。条目以任意顺序产生,特殊条目'。'和' ..'不包括在内。

同样好的副作用:

  

使用scandir()可以将os.walk()的速度提高2-20倍(取决于平台和文件系统),避免在大多数情况下对os.stat()进行不必要的调用。

最好的速度提升实际上是在使用Windows时,我在Windows上的网络驱动器上使用它来检查条目是否是文件或目录,并加快了800%的代码

仅打印路径中文件的小例子:

with os.scandir(path) as it:
    for entry in it:
        if entry.is_file():
            print(entry.name)

这可以从python 3.5获得。如果您的版本较旧,则pypi包会执行相同操作:scandir,只需使用scandir.scandir代替os.scandir

相关问题