Python将LabVIEW生成的CSV转JSON未获预期输出,求解决
解决CSV转指定格式JSON的Python方案
我来帮你搞定这个转换问题!根据你提供的CSV数据和目标JSON格式,我整理了两种Python实现方案,适配不同的使用场景:
方案一:用Pandas快速实现(推荐,代码简洁)
如果你已经安装了Pandas,这是最快捷的方式,代码如下:
import pandas as pd import json # 读取你的CSV文件(替换成实际文件路径) df = pd.read_csv('your_data.csv') # 把表头转换成目标格式:空格转下划线、全部小写 df.columns = [col.lower().replace(' ', '_') for col in df.columns] # 构建你需要的JSON结构:将每列数据转为字符串列表 target_json = { "power_capacity_data": { column: df[column].astype(str).tolist() for column in df.columns } } # 打印格式化后的JSON(方便查看) print(json.dumps(target_json, indent=4)) # 保存到JSON文件 with open('output.json', 'w') as f: json.dump(target_json, f, indent=4)
代码说明:
- 列名转换:把原表头的
Load Current转为load_current,Power Capacity转为power_capacity,完全匹配你示例里的键名风格。 - 数据类型处理:用
astype(str)把数值转成字符串,确保输出的是["1200","1600"]这种格式,而不是整数数组。 - 结构嵌套:所有列数据都包裹在
power_capacity_data字典下,和你要求的格式完全一致。
方案二:用Python标准库实现(无需额外安装包)
如果不想安装Pandas,用Python自带的csv和json模块也能实现:
import csv import json # 读取CSV并转换键名 converted_rows = [] with open('your_data.csv', 'r') as csv_file: reader = csv.DictReader(csv_file) # 先转换表头格式 new_fieldnames = [name.lower().replace(' ', '_') for name in reader.fieldnames] for row in reader: # 转换每一行的键名 converted_row = {new_fieldnames[i]: row[reader.fieldnames[i]] for i in range(len(new_fieldnames))} converted_rows.append(converted_row) # 按列收集数据,构建目标结构 power_data = {} for col in new_fieldnames: power_data[col] = [row[col] for row in converted_rows] target_json = {"power_capacity_data": power_data} # 输出或保存 print(json.dumps(target_json, indent=4)) with open('output.json', 'w') as f: json.dump(target_json, f, indent=4)
运行后输出的JSON格式:
{ "power_capacity_data": { "rpm": [ "1200", "1600" ], "load_current": [ "30", "88" ], "battery_output": [ "12", "18" ], "power_capacity": [ "37", "55" ] } }
我猜你之前没得到预期结果,大概率是这几个原因:
- 没有把原表头的空格替换成下划线、转小写,导致键名不匹配;
- 没有把数值转为字符串,输出了整数数组;
- 结构层级不对,没把所有数据嵌套在
power_capacity_data下面。
内容的提问来源于stack exchange,提问作者Code Name X




