如何修改pandas脚本实现JSON转CSV后Excel正常识别行列格式
问题原因及修改方案
当前脚本导出的CSV在Excel中行列结构异常,核心是配置不符合Excel识别CSV的规则,按以下要点修改即可:
- 修正分隔符:当前设置
sep=":"用冒号做字段分隔,不符合CSV通用标准,Excel默认识别逗号作为列分隔符,直接把sep参数改为逗号,或者删除该参数(pandas默认用逗号做分隔符)。 - 修正编码格式:pandas导出CSV默认用无BOM的UTF-8编码,Excel直接打开这类文件会出现中文乱码,同时可能触发列识别失败,需要把编码改为
utf-8-sig,该编码会在文件头加入Excel可识别的BOM标记,同时不会影响其他工具读取文件。 - 处理嵌套JSON:如果原JSON存在嵌套对象、数组结构,直接用
pd.read_json读取会把嵌套内容转为Python对象字符串,导出后会出现格式混乱的非结构化内容,需要用pd.json_normalize把嵌套结构打平为标准一维表结构。 - 补充路径校验:当前导出路径指向
/home/admin/xml/目录,如果该目录不存在脚本会直接报错终止,导出前先判断目录是否存在,不存在则自动创建即可。
优化后完整代码
import pandas as pd import os import json # 配置文件路径 json_file = r'/home/admin/myfile.json' csv_file = r'/home/admin/csv/myfileSample.csv' # 自动创建导出目录,避免路径不存在报错 os.makedirs(os.path.dirname(csv_file), exist_ok=True) # 读取并扁平化JSON,兼容嵌套结构 with open(json_file, 'r', encoding='utf-8') as f: data = json.load(f) df = pd.json_normalize(data) # 导出适配Excel规范的CSV df.to_csv( csv_file, index=False, encoding='utf-8-sig', sep=',', quoting=1 # 全字段加双引号包裹,避免字段内的逗号、换行符导致列错位 )
补充说明
- 如果你的JSON是完全扁平的无嵌套结构,可以删掉
json.load和json_normalize相关逻辑,直接用df = pd.read_json(json_file)读取即可,分隔符和编码的配置必须保留。 - 导出后直接双击CSV文件即可在Excel中正常打开,行列结构和原JSON表结构完全对应,不会出现乱码、列错位问题。
内容的提问来源于stack exchange,提问作者rodskies
相关产品推荐
相关产品推荐

