民间: 我开始学习Python;但是,我需要循环遍历目录的内容。
我不想将目录的内容啜饮到一个数组中,然后在x'中使用' for i循环它。循环,但循环通过目录处理程序。我知道内存中的数组会更快;但是,我对即兴创作用户空间的空间数量有限。在记忆中。
由于后者,我希望循环遍历目录本身。在Python3 for Linux中执行此操作的最佳方法是什么?因为我正在学习,所以我非常感谢示例代码。
-73
答案 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