0
我想将目录结构存储在嵌套字典中。 目录在python嵌套字典中存储目录结构
├── dirA
│ ├── dirB1
│ │ └── file1.txt
│ └── dirB2
│ └── file2.txt
├── templates
│ ├── base.html
│ └── report.html
└── test.py
嵌套的字典树是这样的:
{'dirs': {'.': {'dirs': {'dirA': {'dirs': {'dirB1': {'dirs': {},
'files': ['file1.txt']},
'dirB2': {'dirs': {},
'files':['file2.txt']}
}
'files': []},
'templates':{'dirs':{},
'files':['base.html', 'report.html']}},
'files': ['test.py']}},
'files': []}
我认为递归是做到这一点的好办法。
import os
import pprint
pp = pprint.PrettyPrinter()
def path_to_dict(path):
d = {'dirs':{},'files':[]}
name = os.path.basename(path)
if os.path.isdir(path):
if name not in d['dirs']:
d['dirs'][name] = {'dirs':{},'files':[]}
for x in os.listdir(path):
d['dirs'][name]= path_to_dict(os.path.join(path,x))
else:
d['files'].append(name)
return d
mydict = path_to_dict('.')
pp.pprint(mydict)
结果与我的预期不同。但我不知道递归中哪一步出错。
我知道为什么这段代码输出错误的结果。 'd = {'dirs':{},'files':[]}'将重置字典项目。 – l0o0
你为什么需要这个?在遍历目录结构时,os.walk()通常更容易处理。 –
@MartinEvans是的,'os.walk()'可以通过目录。但是我正试图改变目录结构。 – l0o0