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

如何将制表符分隔数据转为扁平化字典并导出JSON(多行转数组)

解决制表符文件转扁平化数组字典并导出JSON的问题

需要将制表符分隔文件转换为扁平化字典并导出为JSON,要求当数据行数大于1时,字典中每个字段的值以数组形式存储。

原始制表符数据

Name        file    code    file_location
TESTLIB1    443     123     location1
TESTLIB2    444     124     location2

当前错误输出

{'Name': 'TESTLIB2', 'file': '444', 'code': '124', 'file_location': 'location2'}

期望输出(行数>1时)

{'Name': ['TESTLIB1', 'TESTLIB2'], 'file': ['443', '444'], 'code': ['123', '124'], 'file_location': ['location1', 'location2']}

现有代码的问题

  • 文件路径不统一:读取数据用file.tmp,统计行数却用write_object.tmp,导致行数统计错误
  • 使用dict.update()会直接覆盖键值对,最终仅保留最后一行数据,无法实现数组存储
  • 逻辑重复冗余,if num_lines >1分支未做任何数组化处理

修正后的代码

import csv
import json

data_dict = {}
input_file = 'file.tmp'

# 读取所有行数据并统计有效行数(排除表头)
with open(input_file) as f:
    reader = csv.DictReader(f, delimiter='\t')
    rows = list(reader)
    num_rows = len(rows)

# 根据行数构建目标字典
if num_rows == 1:
    data_dict = rows[0]
else:
    # 为每个字段初始化空数组
    for field in reader.fieldnames:
        data_dict[field] = []
    # 遍历所有行,收集对应字段的值
    for row in rows:
        for field in reader.fieldnames:
            data_dict[field].append(row[field])

# 导出为格式化的JSON文件
with open('output.json', 'w') as output:
    json.dump(data_dict, output, indent=4)

print(data_dict)

代码关键说明

  • 先将所有行数据读取到列表中,既方便统计行数,也便于后续遍历处理
  • 行数为1时直接使用单行数据作为字典;行数>1时,为每个字段初始化数组并批量收集值
  • 使用json.dump()直接写入文件,比先转字符串再写入更高效,同时通过indent参数生成格式化的JSON内容
  • 统一管理文件路径,避免出现文件不匹配的问题

内容的提问来源于stack exchange,提问作者informaticianwannabe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:11:35