如何结合CSV数据与代码定义值生成字典并写入JSON文件?
实现CSV数据与代码自定义值结合并写入JSON文件
核心实现方案
以下是直接可用的完整代码,实现读取CSV数据、合并代码内预定义值、写入JSON文件的全流程:
import csv import json # 代码内定义的固定键值对 fixed_custom_values = { "data_source": "internal_csv", "processing_time": "2024-05-20", "is_valid": True } # 读取CSV并合并数据 processed_records = [] # 替换为你的CSV文件路径 with open("your_data.csv", mode="r", encoding="utf-8") as csv_file: # 自动用CSV表头作为字典键 csv_reader = csv.DictReader(csv_file) for row in csv_reader: # 合并CSV行数据与自定义值,重复键时自定义值会覆盖CSV数据 combined_record = {**row, **fixed_custom_values} processed_records.append(combined_record) # 写入JSON文件 with open("output_result.json", mode="w", encoding="utf-8") as json_file: # indent=4格式化输出,ensure_ascii=False支持非ASCII字符 json.dump(processed_records, json_file, indent=4, ensure_ascii=False)
关键细节说明
- CSV读取:使用
csv.DictReader可直接将CSV表头映射为字典的键,无需手动处理列索引,简化代码逻辑。 - 字典合并:
{**row, **fixed_custom_values}是Python合并字典的简洁写法,若CSV行数据与自定义值存在重复键,自定义值会覆盖CSV中的对应值;如需保留CSV的键值,调换顺序为{**fixed_custom_values, **row}即可。 - JSON写入:
indent=4让输出的JSON文件更易读,ensure_ascii=False确保中文、特殊字符等非ASCII内容正常保存。
特殊场景适配
场景1:CSV文件无表头
如果你的CSV没有表头,需手动指定列对应的键:
import csv import json fixed_values = {"record_type": "raw_data"} # 手动定义每一列对应的键,顺序需与CSV列一致 csv_column_keys = ["user_id", "user_name", "registration_date"] processed_data = [] with open("no_header_data.csv", mode="r", encoding="utf-8") as csv_file: csv_reader = csv.reader(csv_file) for row in csv_reader: # 将CSV行数据转为字典 row_dict = dict(zip(csv_column_keys, row)) combined_dict = {**row_dict, **fixed_values} processed_data.append(combined_dict) with open("no_header_output.json", "w", encoding="utf-8") as f: json.dump(processed_data, f, indent=4)
场景2:生成单个合并字典(非列表)
如果需求是将CSV的键值对数据和自定义值合并成一个大字典(比如CSV是两列的键值格式):
import csv import json fixed_values = {"category": "system_config"} csv_kv_data = {} with open("key_value_csv.csv", mode="r", encoding="utf-8") as csv_file: csv_reader = csv.reader(csv_file) for key, value in csv_reader: csv_kv_data[key] = value # 合并成单个字典 final_dict = {**csv_kv_data, **fixed_values} with open("single_dict_output.json", "w", encoding="utf-8") as f: json.dump(final_dict, f, indent=4)
内容的提问来源于stack exchange,提问作者Lochi
相关产品推荐
相关产品推荐

