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

the*_*_RR 3 python treeview tree directory-structure

这个问题的目的是扩大 stackoverflow 上已经回答的问题的范围“在 python 中列出目录树结构? ”。

\n

目标是形成一个字符串列表,直观地表示带有分支的目录树。

\n

但是,输入不是有效的目录路径(如已回答的主题中所示),\n我们的任务是生成与输入相同的“路径文件列表”行为。

\n

当然,该函数需要递归才能适应任何深度的文件。

\n

示例

\n

输入:

\n
[\'main_folder\\\\file01.txt\',\n \'main_folder\\\\file02.txt\',\n \'main_folder\\\\folder_sub1\\\\file03.txt\',\n \'main_folder\\\\folder_sub1\\\\file04.txt\',\n \'main_folder\\\\folder_sub1\\\\file05.txt\',\n \'main_folder\\\\folder_sub1\\\\folder_sub1-1\\\\file06.txt\',\n \'main_folder\\\\folder_sub1\\\\folder_sub1-1\\\\file07.txt\',\n \'main_folder\\\\folder_sub1\\\\folder_sub1-1\\\\file08.txt\',\n \'main_folder\\\\folder_sub2\\\\file09.txt\',\n \'main_folder\\\\folder_sub2\\\\file10.txt\',\n \'main_folder\\\\folder_sub2\\\\file11.txt\']\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file01.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file02.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 folder_sub1\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file03.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file04.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file05.txt\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 folder_sub1-1\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file06.txt\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file07.txt\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file08.txt\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 folder_sub2\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file09.txt\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file10.txt\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file11.txt\n
Run Code Online (Sandbox Code Playgroud)\n

将文件路径列表转换为表示目录结构的嵌套字典已在主题“ Python 将路径转换为字典”中得到解答。\n使用以下输出:

\n
{\'main_folder\': {\'file01.txt\': \'txt\',\n                 \'file02.txt\': \'txt\',\n                 \'folder_sub1\': {\'file03.txt\': \'txt\',\n                                 \'file04.txt\': \'txt\',\n                                 \'file05.txt\': \'txt\',\n                                 \'folder_sub1-1\': {\'file06.txt\': \'txt\',\n                                                   \'file07.txt\': \'txt\',\n                                                   \'file08.txt\': \'txt\'}},\n                 \'folder_sub2\': {\'file09.txt\': \'txt\',\n                                 \'file10.txt\': \'txt\',\n                                 \'file11.txt\': \'txt\'}}}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

小智 6

bigtree是一个与 Python 列表、字典和 pandas DataFrame 集成的 Python 树实现。

\n

对于这个场景,我们可以使用3行代码,

\n
path_list = [\n    \'main_folder\\\\file01.txt\',\n    \'main_folder\\\\file02.txt\',\n    \'main_folder\\\\folder_sub1\\\\file03.txt\',\n    \'main_folder\\\\folder_sub1\\\\file04.txt\',\n    \'main_folder\\\\folder_sub1\\\\file05.txt\',\n    \'main_folder\\\\folder_sub1\\\\folder_sub1-1\\\\file06.txt\',\n    \'main_folder\\\\folder_sub1\\\\folder_sub1-1\\\\file07.txt\',\n    \'main_folder\\\\folder_sub1\\\\folder_sub1-1\\\\file08.txt\',\n    \'main_folder\\\\folder_sub2\\\\file09.txt\',\n    \'main_folder\\\\folder_sub2\\\\file10.txt\',\n    \'main_folder\\\\folder_sub2\\\\file11.txt\']\n\nfrom bigtree import list_to_tree, print_tree\nroot = list_to_tree(path_list, sep="\\\\")\nprint_tree(root)\n
Run Code Online (Sandbox Code Playgroud)\n

这将导致输出,

\n
main_folder\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file01.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file02.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 folder_sub1\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file03.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file04.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file05.txt\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 folder_sub1-1\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file06.txt\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file07.txt\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file08.txt\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 folder_sub2\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file09.txt\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file10.txt\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file11.txt\n
Run Code Online (Sandbox Code Playgroud)\n

来源/免责声明:我是bigtree;)的创建者

\n