如何修改Python代码实现多组磁盘信息合并到JSON的description字段?
如何修改Python代码生成指定格式的输出?
首先得明确:你期望的输出格式其实不符合JSON规范(同一个键下直接放多个字典在语法上是不合法的),不过我会先帮你实现你想要的视觉格式,同时也会给出标准JSON格式的方案,供你参考。
问题分析
你的原始代码每次处理一行就覆盖json_data,遇到空行就打印单条磁盘信息,所以输出是多个独立的description字典。而你想要把所有磁盘信息整合到同一个description下面,核心是要调整数据结构——把多个磁盘字典收集到一个列表里,再绑定到description键上。
修改后的代码(匹配你期望的格式)
data = {'description': []} current_disk = {} with open("json_content.txt", "r") as fp: for line in fp.readlines(): stripped_line = line.strip() # 处理空行:把当前收集的磁盘信息加入列表,重置临时字典 if not stripped_line: if current_disk: data['description'].append(current_disk) current_disk = {} continue # 拆分键值对(只拆一次,避免值里有冒号导致错误) split_data = stripped_line.split(':', 1) if len(split_data) == 2: key = split_data[0].strip() value = split_data[1].strip() current_disk[key] = value # 处理文件末尾没有空行的情况,避免最后一条数据丢失 if current_disk: data['description'].append(current_disk) # 手动格式化输出,模拟你想要的格式(注意:这不是合法JSON) print("{'description': {") for idx, disk in enumerate(data['description']): disk_str = ", ".join([f"{k}: '{v}'" for k, v in disk.items()]) # 最后一条不加逗号 print(f" {{{disk_str}}}{',' if idx != len(data['description'])-1 else ''}") print(" }}")
运行这段代码后,输出会和你期望的一致:
{'description': { {'mount_disk': '/data', 'actual_size': '2.5T', 'fsystem': '/dev/sdb'}, {'mount_disk': '/data', 'actual_size': '1.5T', 'fsystem': '/dev/sdb'}, {'mount_disk': '/data', 'actual_size': '3.5T', 'fsystem': '/dev/sdb'} }}
更规范的标准JSON格式实现
如果你需要后续可正常解析的合法JSON格式,推荐使用json模块输出,只需把最后的打印部分替换成:
import json print(json.dumps(data, indent=2))
输出会是标准的JSON数组结构:
{ "description": [ { "mount_disk": "/data", "actual_size": "2.5T", "fsystem": "/dev/sdb" }, { "mount_disk": "/data", "actual_size": "1.5T", "fsystem": "/dev/sdb" }, { "mount_disk": "/data", "actual_size": "3.5T", "fsystem": "/dev/sdb" } ] }
关键改动说明
- 新增
current_disk临时字典,用来收集单个磁盘的所有键值对,避免覆盖之前的数据 - 遇到空行时,把
current_disk加入data['description']列表,而不是直接打印 - 使用
split(':', 1)确保值中包含冒号时(比如path:/mnt:backup)不会被错误拆分 - 补充处理文件末尾无空行的情况,防止最后一条磁盘信息丢失
内容的提问来源于stack exchange,提问作者Shrikant
相关产品推荐
相关产品推荐

