Python:解决含JSON的逗号分隔文本转CSV时JSON拆分为多列的问题
解决带JSON字段的逗号分隔文本转CSV时JSON被拆分的问题
这个问题我太熟了——本质是你的JSON字段里包含逗号,普通的逗号分隔解析会把JSON内部的逗号当成列分隔符,直接把完整的JSON拆得七零八落。下面给你两种靠谱的Python解决方法,都是我日常处理这类文件常用的:
方法1:使用Python标准库csv模块(无需额外安装依赖)
Python自带的csv模块可以识别被引号包裹的完整字段,只要我们指定正确的引号字符,就能避免JSON被拆分。你的示例里JSON是用单引号'包裹的,所以我们把quotechar设为单引号即可:
import csv # 替换成你的输入文件路径 input_path = "your_input_file.txt" # 替换成你想要的输出CSV路径 output_path = "your_output_file.csv" with open(input_path, 'r', encoding='utf-8') as infile, open(output_path, 'w', newline='', encoding='utf-8') as outfile: # 初始化读取器:指定逗号为分隔符,单引号为字段包裹符,跳过逗号后的空格 reader = csv.reader(infile, delimiter=',', quotechar="'", skipinitialspace=True) writer = csv.writer(outfile) for row in reader: # 处理示例里的NULL值,替换为空字符串(你也可以换成None或者其他值) cleaned_row = [cell if cell != 'NULL' else '' for cell in row] writer.writerow(cleaned_row)
关键参数说明:
quotechar="'":告诉解析器,被单引号包裹的内容是一个完整字段,不管里面有多少逗号都不会拆分skipinitialspace=True:自动跳过逗号后面的空格,避免字段开头出现多余空格newline='':避免写入CSV时出现多余的空行
方法2:用Pandas快速处理(代码更简洁)
如果你已经安装了Pandas,这个方法会更省心,Pandas的read_csv默认就能处理带引号的字段,只需要简单配置参数:
import pandas as pd # 读取文本文件:指定分隔符、引号字符,把NULL识别为缺失值 df = pd.read_csv( "your_input_file.txt", sep=',', quotechar="'", na_values='NULL', skipinitialspace=True ) # 保存为CSV,index=False是不保存行索引 df.to_csv("your_output_file.csv", index=False)
这个方法的优势是:自动处理缺失值、数据框格式方便后续做其他处理,比如你之后想解析JSON字段成单独列也很方便(可以用df['json_column'].apply(pd.read_json))。
注意事项:
如果你的输入文件里存在未转义的引号(比如JSON内部有和包裹符一样的单引号),可能需要先做转义处理,但从你的示例数据来看,这种情况应该不存在,直接用上面的代码就能解决问题。
内容的提问来源于stack exchange,提问作者Anshul Sharma
相关产品推荐
相关产品推荐

