如何利用多份JSON数据生成对应名称的UML文件?
批量处理JSON生成对应名称的UML文件
要实现批量生成与JSON同名的UML文件,核心是动态处理文件名,结合你已有的代码,只需添加文件名转换逻辑并将单文件生成逻辑整合到循环中即可,完整代码如下:
import json import glob import os # 获取所有目标JSON文件 json_files = glob.glob('JSON/*.json', recursive=True) for single_file in json_files: # 1. 从JSON路径生成对应UML文件名 # 提取不带路径和后缀的纯文件名 file_base_name = os.path.splitext(os.path.basename(single_file))[0] # 拼接UML文件的完整路径(可根据你的目录结构调整) uml_file_path = f'test/UML/{file_base_name}.uml' # 2. 加载当前JSON文件的数据 with open(single_file, 'r') as f: json_data = json.load(f) # 3. 生成对应UML文件内容 with open(uml_file_path, 'w') as f: f.write("@startuml\nprintscale weekly\nProject starts 2022-08-01\n") for stuff in json_data["releases"]: new_line = f"[Release {stuff['release']}] starts {stuff['start_date']} and ends {stuff['end_date']}\n" f.write(new_line) print(new_line) f.write("@enduml") # 4. 调用PlantUML生成对应PNG文件 os.system(f"java -jar test/plantuml.jar {uml_file_path} -o ../PNG/")
关键逻辑说明
- 文件名动态转换:
os.path.basename(single_file):从完整路径中提取单纯的文件名(比如JSON/file1.json转为file1.json)os.path.splitext(...):拆分文件名与后缀,取索引0得到不带后缀的名称(file1.json转为file1)- 通过f-string拼接出与原JSON同名的UML文件路径
- 循环整合:将单文件的加载、UML生成、PNG转换逻辑全部放入循环,每次迭代处理一个JSON文件
- 动态命令执行:把
os.system中的固定文件名替换为动态生成的uml_file_path,确保每个UML文件都能生成对应PNG
额外提示
- 确保
test/UML/和../PNG/目录已存在,可提前用os.makedirs("test/UML/", exist_ok=True)这类代码自动创建目录 - 如果JSON文件结构存在差异,建议添加异常捕获逻辑,避免单个文件出错导致整个批量任务中断
内容的提问来源于stack exchange,提问作者Jforpython
相关产品推荐
相关产品推荐

