gpt4 book ai didi

python - 在Python中的嵌套字典中存储目录结构

转载 作者:行者123 更新时间:2023-12-01 02:34:34 27 4
gpt4 key购买 nike

我正在尝试将目录结构存储在嵌套字典中。目录树

├── 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)

关于python - 在Python中的嵌套字典中存储目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46400599/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com