从路径文件列表中列出python中的目录树结构

the_RR

该问题旨在扩大已通过主题“ List directory tree structure in python? ”在stackoverflow上回答的问题的范围。

目标是形成一个字符串列表,这些字符串在视觉上表示目录树,带有分支

但不是输入是有效的目录路径(如已回答的主题),而是生成与“路径文件列表”相同的行为作为输入。

自然地,该函数需要递归以适应任何深度的文件。

例子

输入:

['main_folder\\file01.txt',
 'main_folder\\file02.txt',
 'main_folder\\folder_sub1\\file03.txt',
 'main_folder\\folder_sub1\\file04.txt',
 'main_folder\\folder_sub1\\file05.txt',
 'main_folder\\folder_sub1\\folder_sub1-1\\file06.txt',
 'main_folder\\folder_sub1\\folder_sub1-1\\file07.txt',
 'main_folder\\folder_sub1\\folder_sub1-1\\file08.txt',
 'main_folder\\folder_sub2\\file09.txt',
 'main_folder\\folder_sub2\\file10.txt',
 'main_folder\\folder_sub2\\file11.txt']

输出:

├── file01.txt
├── file02.txt
├── folder_sub1
│   ├── file03.txt
│   ├── file04.txt
│   ├── file05.txt
│   └── folder_sub1-1
│       ├── file06.txt
│       ├── file07.txt
│       └── file08.txt
└── folder_sub2
    ├── file09.txt
    ├── file10.txt
    └── file11.txt

将文件路径列表转换为表示目录结构的嵌套字典已在“ Python 将路径转换为字典”主题中得到解答。有了这个输出:

{'main_folder': {'file01.txt': 'txt',
                 'file02.txt': 'txt',
                 'folder_sub1': {'file03.txt': 'txt',
                                 'file04.txt': 'txt',
                                 'file05.txt': 'txt',
                                 'folder_sub1-1': {'file06.txt': 'txt',
                                                   'file07.txt': 'txt',
                                                   'file08.txt': 'txt'}},
                 'folder_sub2': {'file09.txt': 'txt',
                                 'file10.txt': 'txt',
                                 'file11.txt': 'txt'}}}

但是用分支生成漂亮的布局仍然没有解决。

拉斐尔DSS

可能的解决方案:

paths = {
    'main_folder': {
        'file01.txt': 'txt',
        'file02.txt': 'txt',
        'folder_sub1': {
            'file03.txt': 'txt',
            'file04.txt': 'txt',
            'file05.txt': 'txt',
            'folder_sub1-1': {
                'file06.txt': 'txt',
                'file07.txt': 'txt',
                'file08.txt': 'txt'
            }
        },
        'folder_sub2': {
            'file09.txt': 'txt',
            'file10.txt': 'txt',
            'file11.txt': 'txt'
        }
    }
}


# prefix components:
space =  '    '
branch = '│   '
# pointers:
tee =    '├── '
last =   '└── '

def tree(paths: dict, prefix: str = ''):
    """A recursive generator, given a directory Path object
    will yield a visual tree structure line by line
    with each line prefixed by the same characters
    """
    # contents each get pointers that are ├── with a final └── :
    pointers = [tee] * (len(paths) - 1) + [last]
    for pointer, path in zip(pointers, paths):
        yield prefix + pointer + path
        if isinstance(paths[path], dict): # extend the prefix and recurse:
            extension = branch if pointer == tee else space
            # i.e. space because last, └── , above so no more |
            yield from tree(paths[path], prefix=prefix+extension)


for line in tree(paths):
    print(line)

参考:在 python 中列出目录树结构?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章