这或多或少是对List directory tree structure in python?和这个答案https://stackoverflow.com/a/51991554/7422721的反向问题
鉴于我们有文本艺术风格目录树(ASCII,但不限于),生成为tree
程序或等效Python脚本的输出:
a/
├── b/
│ └── c/
│ ├── file_1
│ └── file_2
└── d/
每个文件名以'/', '=', '*', '@', '|' or '>'
中的一个指示文件类型结束,与ls -F
或tree -F
约定一样。因此,以/
结尾的文件名将是目录,=
用于套接字等。如果没有结尾,我们假设它是常规文件。
如何将其读回原生数据结构,例如:
[
"a": [
"b": [
"c": [
"file_1", "file_2"
]
],
"d": []
]
]
或者可以在内存文件系统中表示的其他对象?
这里的目标是为操作磁盘上文件的脚本创建可读单元测试。
我能够将您的问题中的样本树转换为dict格式:
{'a': {'b': {'c': {'file_1': {}, 'file_2': {}}}, 'd': {}}}
脚本:
import re
def find_children(tree):
result = {}
for i, line in enumerate(tree.split('\n')):
child = re.findall('^\w+', line)
if child:
parent = child[0]
child_tree = '\n'.join([x[len(parent)+3:] for x in tree.split('\n')[i+1:]])
result[parent] = find_children(child_tree)
return result
with open('tree.txt', 'r', encoding='utf-8') as f:
tree_dict = find_children(f.read())