Python遍历目录树的方式是什么?

2024-04-20 11:44:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我觉得分配文件和文件夹以及做+=[item]部分有点老土。有什么建议吗?我正在使用Python 3.2

from os import *
from os.path import *

def dir_contents(path):
    contents = listdir(path)
    files = []
    folders = []
    for i, item in enumerate(contents):
        if isfile(contents[i]):
            files += [item]
        elif isdir(contents[i]):
            folders += [item]
    return files, folders

Tags: 文件pathfromimport文件夹osdefdir
3条回答

os.walkos.scandir是很好的选择,但是,我已经越来越多地使用了pathlib,对于pathlib,您可以使用.glob()方法:

root_directory = Path(".")
for path_object in root_directory.glob('**/*'):
    if path_object.is_file():
        print(f"hi, I'm a file: {path_object}")
    elif path_object.is_dir():
        print(f"hi, I'm a dir: {path_object}")


看看^{}函数,它返回路径及其包含的目录和文件。这将大大缩短您的解决方案

适用于使用pathlibpython >= 3.4)寻找解决方案的任何人

from pathlib import Path

def walk(path): 
    for p in Path(path).iterdir(): 
        if p.is_dir(): 
            yield from walk(p)
            continue
        yield p.resolve()

# recursively traverse all files from current directory
for p in walk(Path('.')): 
    print(p)

# the function returns a generator so if you need a list you need to build one
all_files = list(walk(Path('.'))) 

然而,如上所述,这并不保留os.walk给出的自上而下的顺序

相关问题 更多 >