l0o*_*0o0 2 python recursion dictionary
我正在尝试将目录结构存储在嵌套字典中。\n目录树
\n\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dirA\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dirB1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file1.txt\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dirB2\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file2.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 templates\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base.html\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 report.html\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test.py \nRun Code Online (Sandbox Code Playgroud)\n\n嵌套字典如下:
\n\n{'dirs': {'.': {'dirs': {'dirA': {'dirs': {'dirB1': {'dirs': {},\n 'files': ['file1.txt']}, \n 'dirB2': {'dirs': {},\n 'files':['file2.txt']}\n } \n 'files': []}, \n 'templates':{'dirs':{},\n 'files':['base.html', 'report.html']}},\n 'files': ['test.py']}},\n 'files': []}\nRun Code Online (Sandbox Code Playgroud)\n\n我认为递归是实现此目的的好方法。
\n\nimport os \nimport pprint \n\npp = pprint.PrettyPrinter()\ndef path_to_dict(path): \n d = {'dirs':{},'files':[]}\n name = os.path.basename(path)\n if os.path.isdir(path):\n if name not in d['dirs']:\n d['dirs'][name] = {'dirs':{},'files':[]}\n for x in os.listdir(path):\n d['dirs'][name]= path_to_dict(os.path.join(path,x)) \n else: \n d['files'].append(name) \n return d \n\nmydict = path_to_dict('.')\npp.pprint(mydict)\nRun Code Online (Sandbox Code Playgroud)\n\n结果和我预想的不一样。但我不知道递归中哪一步出了问题。
\n您在每次调用时创建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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3251 次 |
| 最近记录: |