python实现树结构的json⽂件_⽬录树转JSON
⽂件夹⽬录树转json集合
背景:为了处理2处不同来源的数据,就都转换成json集合,⽅便操作。
⽬录树结构
----demo\
|----v1\
| |----init\
补码相加超过128怎么办
| | |----time.py
| |----order.py
| |----surface\
| | |----detail.py
| | |----order.py
| | |----user.py
| |----user.py
|----v2\
| |----country.py
| |----list.py
|----v3\python解析json文件
| |----languages.py
| |----surface\
| | |----detail.py
| | |----list.py
truncate啥意思
| |----user.py
以上是⽬录结构 ⾸先进⾏读取,放到⼀个列表⾥,在读取的时候,还进⾏了正则匹配,匹配对应的py⽂件,以及⽂件内部的 ⽅法。并且内部匹配到的每⼀条 ⽅法⽣成⼀条记录
import sys
from pathlib import Path
import json
import re
tree_str = ''
tree_list = []
phpcms小说模块def generate_tree(pathname, n=0):
global tree_str
global tree_list
if pathname.is_file():
temp_file_name = pathname.name
temp_file_name_list = temp_file_name.split('.')
if len(temp_file_name_list) == 2 and temp_file_name_list[1] == 'py': file = open(pathname, 'r', encoding='utf-8')
pycharm终端切换路径
temp_action = []
for line adlines():
line = line.strip()
strName = getStrName(pathname.parent, temp_file_name_list[0]) matchObj = re.match('def getAction()', line)
if matchObj:
temp_action.append('get')
matchObj = re.match('def postAction()', line)
if matchObj:
temp_action.append('post')
matchObj = re.match('def putAction()', line)
if matchObj:
temp_action.append('put')
matchObj = re.match('def deleteAction()', line)
if matchObj:
temp_action.append('delete')
if len(temp_action) > 0:
temp_strName = strName + ',' + '_'.join(temp_action)
tree_list.append(temp_strName.lower())
elif pathname.is_dir():
for cp in pathname.iterdir():
generate_tree(cp, n + 1)
def getStrName(pathname, strName):
if pathname.name != 'demo':
strName = pathname.name + '/' + strName
strName = getStrName(pathname.parent,strName)
return strNamespringmvc的核心配置文件
if __name__ == '__main__':
p = Path(r'E:\www\myleetcode\demo')
generate_tree(p)
tree_list.sort()
print(tree_list)
执⾏结果
['v1/init/time,get', 'v1/order,get', 'v1/surface/detail,post_get', 'v1/surface/order,post', 'v1/surface/user,post', 'v1/user,get', 'v2/country,put', 'v2/list,put', 'v3/languages,get', 'v3/surface/detail,delete', 'v3/surface/list,delete', 'v3/user,get']
以上⽣成了初步的记录,接下来就是转换成想要的json格式
转json
塞到字典⾥
temp = {}
for api in tree_list:
temp_split = api.split('/')
if len(temp_split) == 2:
temp_str = temp_split[1].split(',')
temp_api = {temp_str[0] : temp_str[1]}
if temp_split[0] not in temp:
temp[temp_split[0]] = temp_api
else:
temp[temp_split[0]].update(temp_api)
elif len(temp_split) == 3:
temp_str = temp_split[2].split(',')
temp_api = {temp_str[0] : temp_str[1]}
if temp_split[0] not in temp:
temp_surface = {temp_split[1] : temp_api}
temp[temp_split[0]] = temp_surface
else:
temp_surface = temp[temp_split[0]]
if temp_split[1] not in temp_surface:
temp_surface.update({temp_split[1]: temp_api})
else:
temp_api_list = temp_surface[temp_split[1]]
temp_api_list.update(temp_api)
temp_surface[temp_split[1]] = temp_api_list
temp[temp_split[0]] = temp_surface
str_json = json.dumps(temp)
print (str_json)
json结果
{"v1": {"init": {"time": "get"}, "order": "get", "surface": {"detail": "post_get", "order": "post", "user": "post"}, "user": "get"}, "v2": {"country": "put", "list": "put"}, "v3": {"languages": "get", "surface": {"detail": "delete", "list": "delete"}, "user": "get"}}
这样做的⽬的是⽅便下⼀步画出树,结构图能够清晰的⽐较差异。
本作品采⽤《CC 协议》,转载必须注明作者和本⽂链接

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。