You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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加数据集分隔标记,不然多次追加后没法拆分不同批次的数据:

  1. 先改造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")
    
  2. 再改造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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:18:14