欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 将svn目录转为多层json

程序员文章站 2022-07-15 13:10:03
...

例如我们获取到了一串如下的目录

st = '发布申请书20200521.xlsx 企业微信截图_1590048058237.png 测试/ 测试/20200521版本测试报告.docx 测试/20200521用户验收报告.doc 测试/产品晒单逻辑新增测试用例.xlsx 部署相关/ 部署相关/部署包/ 部署相关/部署包/interface-sync-web.war 部署相关/部署包/job-web.war 需求/ 需求/产品筛单逻辑新增优化(1).doc 需求/产品筛单逻辑新增优化.xlsx'
lines = st.split(' ')

python 将svn目录转为多层json

import json

def func(line,dir_list,id_value):
    # 切割,得到一个列表 dir_str
    dir_str = line.split('/')
    # 判断该行是否为目录
    if str(dir_str[-1]) == "":
        if len(dir_str) == 2:
            # 该行为根目录
            dir_list.append({"id":id_value,"expanded":True,"name":str(dir_str[0]),"title":str(dir_str[0]),"children":[]})
        else:
            i = 0 
            for dir_i in dir_list:
                if dir_i['name'] == dir_str[0]:
                    line_min = '/'.join(dir_str[1:])
                    dir_list_min = dir_list[i]['children']
                    break
                i += 1
            # 如果多层目录,就递归
            func(line_min,dir_list_min,id_value)
    else:
        # 处理文件
        if len(dir_str) == 1:
            dir_list.append({"id":id_value,"name":str(dir_str[0]),"title":str(dir_str[0])})
        else:
            i = 0
            for dir_i in dir_list:
                if dir_i['name'] == dir_str[0]:
                    line_min = '/'.join(dir_str[1:])
                    dir_list_min = dir_list[i]['children']
                    break
                i += 1
            # 如果多层目录,就递归
            func(line_min,dir_list_min,id_value)
    return dir_list

# 创建一个空列表
alist = []

id_value = 1
for i in lines:
    alist = func(i,alist,id_value)
    id_value += 1
    

# 结果打印
print(json.dumps(alist, ensure_ascii=False))

转化结果如下:
python 将svn目录转为多层json
其中dir_list.append()的两行,为适配前端数据结构的代码,大家可以根据前端的实际需求调整该结构。