我正在尝试将目录结构存储在嵌套字典中。
目录树
├── 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)
结果和我预想的不一样。但不知道递归哪一步出了问题。
您正在创建dict
每次调用时都需要对象,你需要做的就是传递它d['dirs'][name]
每次调用的值以允许其递归构造:
import os
import pprint
pp = pprint.PrettyPrinter()
def path_to_dict(path, d):
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):
path_to_dict(os.path.join(path,x), d['dirs'][name])
else:
d['files'].append(name)
return d
mydict = path_to_dict('.', d = {'dirs':{},'files':[]})
pp.pprint(mydict)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)