Python实现txt转数组结构JSON并支持追加多组数据集
实现方案
你现有代码的核心问题有两个:
- 转换逻辑每次直接把读取出的单个字典覆盖写入JSON,没有做数组追加处理
- 持续往txt追加内容时,没有做数据集分隔,多次运行后没法区分哪几行属于同一次采集的5条记录
最省事的实现是直接操作JSON文件存储,不需要txt做中转,每次采集完一组数据就追加到JSON数组里,完全符合你要的输出结构。
方案1:直接操作JSON(推荐,无需txt中转)
不需要中间存txt,每次运行采集完数据直接追加到目标JSON文件,不会出现数据混淆问题,性能也更好:
import json import os JSON_PATH = "new1.json" # 采集本次的5条用户数据,组装为单个字典 current_data = {} for i in range(1, 6): user = input("Enter username: ") current_data[f"user{i}"] = user # 读取已有JSON数组,文件不存在/为空时初始化空数组 if os.path.exists(JSON_PATH): with open(JSON_PATH, "r", encoding="utf-8") as f: try: data_list = json.load(f) except json.JSONDecodeError: data_list = [] else: data_list = [] # 把本次采集的字典追加到数组后写回文件 data_list.append(current_data) with open(JSON_PATH, "w", encoding="utf-8") as f: json.dump(data_list, f, indent=4, ensure_ascii=False)
每次运行这段代码,采集完5个用户名后,就会自动把这组数据作为独立对象追加到JSON数组里,输出结构和你给出的期望示例完全一致。
方案2:保留txt写入逻辑的改造方法
如果你一定要保留「先写txt再转JSON」的流程,需要先给txt加数据集分隔标记,不然多次追加后没法拆分不同批次的数据:
- 先改造txt写入代码,每写完一组5条数据就加一个分隔线:
i = 1 while i < 6: user = input("Enter username: ") with open("new.txt", "a", encoding="utf-8") as n: n.write(f"user{i} {user}\n") i += 1 # 写完一组追加分隔标记 with open("new.txt", "a", encoding="utf-8") as n: n.write("---\n") - 再改造txt转JSON的逻辑,按分隔线拆分多组数据,组装为目标数组结构:
import json files = 'new.txt' data_list = [] current_group = {} with open(files, "r", encoding="utf-8") as f: for line in f: line = line.strip() if not line: continue # 遇到分隔线就把当前组存入数组,重置临时字典 if line == "---": if current_group: data_list.append(current_group) current_group = {} continue key, desc = line.split(None, 1) current_group[key] = desc.strip() # 处理最后一组未追加分隔线的边界情况 if current_group: data_list.append(current_group) with open('new1.json', 'w', encoding="utf-8") as otfile: json.dump(data_list, otfile, indent=4, ensure_ascii=False)
注意:方案2每次转换都会全量读取txt内容重新生成JSON,txt内存储的历史数据越多转换速度越慢,仅适合数据量很小的场景,数据量较大时优先选择方案1。
内容的提问来源于stack exchange,提问作者Don Eros
相关产品推荐
相关产品推荐

