如何在Python中将指定CSV转换为按日期、模型嵌套的JSON?
Python: Convert CSV to Nested JSON by Date and Model
没问题,我来帮你搞定这个CSV转嵌套JSON的需求!咱们用Python的标准库就能轻松实现,不需要额外装第三方包,步骤清晰又好上手。
思路概述
我们会用csv库读取你的CSV文件,然后通过字典构建日期→模型→数值的嵌套结构,最后用json库把这个结构转换成格式工整的JSON,方便后续遍历验证数据。
完整代码示例
假设你的CSV文件名为data.csv,内容就是你给出的示例数据,代码可以写成这样:
import csv import json def convert_csv_to_nested_json(csv_file_path, output_json_path=None): # 初始化顶层嵌套字典 nested_data = {} with open(csv_file_path, mode='r') as csv_file: # 读取CSV:因为是空格分隔,指定分隔符并忽略字段前的空格 csv_reader = csv.reader(csv_file, delimiter=' ', skipinitialspace=True) for row in csv_reader: # 拼接日期+时间作为顶层key date = f"{row[0]} {row[1]}" # 提取模型(对应CSV里的code字段)作为第二层key model = row[2] # 把数值转成浮点数,方便后续数据验证 value = float(row[3]) # 构建嵌套结构 if date not in nested_data: nested_data[date] = {} nested_data[date][model] = value # 生成格式化的JSON字符串 json_str = json.dumps(nested_data, indent=4) # 可选:写入文件或直接打印 if output_json_path: with open(output_json_path, 'w') as json_file: json.dump(nested_data, json_file, indent=4) print(f"JSON文件已保存到: {output_json_path}") else: print(json_str) return nested_data # 调用函数:替换成你的CSV路径,可选指定输出JSON路径 convert_csv_to_nested_json('data.csv', 'output.json')
代码说明
- 读取CSV:因为你的CSV用空格分隔,所以给
csv.reader指定了delimiter=' ',同时skipinitialspace=True能处理字段前的多余空格,避免出现空元素。如果你的CSV是逗号分隔,直接去掉这两个参数即可。 - 构建嵌套结构:
- 顶层字典的key是完整的日期字符串(比如
"15-01-2017 00:00")。 - 每个日期对应的value是另一个字典,key是模型(也就是CSV里的
code字段),value是转成浮点数的数值,方便后续验证。
- 顶层字典的key是完整的日期字符串(比如
- 输出JSON:
json.dumps生成带缩进的JSON字符串,indent=4让结构更清晰;也可以用json.dump直接写入文件。
最终输出的JSON结构
运行代码后,你会得到这样的嵌套JSON:
{ "15-01-2017 00:00": { "EMA_EPD1_PTG_NUS_DPG": 2.138, "EMA_EPD2_PTG_NUS_DPG": 1.75 }, "15-02-2017 00:00": { "EMA_EPD1_PTG_NUS_DPG": 2.19, "EMA_EPD2_PTG_NUS_DPG": 1.757 } }
额外扩展(可选)
如果你的“模型”是code字段的一部分(比如从EMA_EPD1_PTG_NUS_DPG提取EPD1作为模型名),只需要修改提取模型的代码:
# 按下划线分割字符串,取第二个元素作为模型名 model = row[2].split('_')[1]
这样输出的JSON里模型名就会变成"EPD1"、"EPD2",结构更简洁。
内容的提问来源于stack exchange,提问作者Anupam Soni
相关产品推荐
相关产品推荐

