如何将制表符分隔数据转为扁平化字典并导出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
相关产品推荐
相关产品推荐

