使用Python从CSV提取元素并转换为JSON的问题求助
CSV转JSON的问题解决方法
一、解决csv.reader输出单元素列表的问题
你的CSV文件使用**分号;**作为分隔符,但csv.reader默认以逗号,为分隔符,所以才会把整行当作单个元素。只需指定delimiter=';'参数即可正确拆分:
import csv # 注意路径用双反斜杠或原始字符串避免转义 with open(r'X:\data.csv', 'rt', encoding='utf-8') as f: data = csv.reader(f, delimiter=';') for row in data: print(row)
运行后会输出拆分后的多元素列表,比如['Python', 'Guido van Rossum', '1991', '.py']。
二、修复readlines()迭代异常的问题
你用readlines()手动拆分的方法能生成结果,但迭代异常大概率是因为空行、格式不匹配的行导致的。可以添加空行过滤、元素数量校验来避免:
import json with open(file, 'r', encoding='utf-8') as in_file: lines = in_file.readlines() out_filename_a = f"{vid_name}.json" data_list = [] # 提取表头(假设第一行是表头) headers = lines[0].strip().split(';') for line in lines[1:]: line = line.strip() # 跳过空行 if not line: continue raw_list = line.split(';') # 校验元素数量和表头一致,避免索引错误 if len(raw_list) == len(headers): data_dict = dict(zip(headers, raw_list)) data_list.append(data_dict) else: print(f"跳过格式错误的行: {line}") # 写入JSON文件 with open(out_filename_a, 'w', encoding='utf-8') as json_file: json.dump(data_list, json_file, indent=4, ensure_ascii=False)
三、更高效的CSV转JSON方案
推荐使用csv.DictReader,它会自动把表头作为字典的键,直接生成可序列化的字典列表,代码更简洁:
import csv import json with open(r'X:\data.csv', 'r', encoding='utf-8') as csv_file: # 指定分号分隔符,自动读取表头 csv_reader = csv.DictReader(csv_file, delimiter=';') # 转换为字典列表 data_list = list(csv_reader) # 写入格式化的JSON文件 with open('output.json', 'w', encoding='utf-8') as json_file: json.dump(data_list, json_file, indent=4, ensure_ascii=False)
indent=4让JSON格式更美观ensure_ascii=False支持中文等非ASCII字符
内容的提问来源于stack exchange,提问作者Abhinav Bhattacharya
相关产品推荐
相关产品推荐

