Mar*_*ark 16 python python-3.x
Python 3.5的os.scandir(path)
函数返回轻量级DirEntry对象,这些对象对文件信息非常有帮助.但是,它只适用于传递给它的直接路径.有没有办法将它包装在递归函数中,以便它访问给定路径下的所有子目录?
Ben*_*oyt 27
您可以使用递归扫描os.walk()
,或者如果您需要DirEntry
对象或更多控件,请编写如下的递归函数scantree()
:
try:
from os import scandir
except ImportError:
from scandir import scandir # use scandir PyPI module on Python < 3.5
def scantree(path):
"""Recursively yield DirEntry objects for given directory."""
for entry in scandir(path):
if entry.is_dir(follow_symlinks=False):
yield from scantree(entry.path) # see below for Python 2.x
else:
yield entry
if __name__ == '__main__':
import sys
for entry in scantree(sys.argv[1] if len(sys.argv) > 1 else '.'):
print(entry.path)
Run Code Online (Sandbox Code Playgroud)
笔记:
'.'
以及类似内容开头的目录或文件.follow_symlinks=false
在这样的is_dir()
递归函数中调用,以避免符号链接循环.在Python 2.x上,将yield from
行替换为:
for entry in scantree(entry.path):
yield entry
Run Code Online (Sandbox Code Playgroud)