如何将每行已是JSON格式的CSV文件逐行导出为独立JSON文件(解决额外引号问题)
如何将每行已是JSON格式的CSV文件逐行导出为独立JSON文件(解决额外引号问题)
嗨,这个问题我刚好碰到过!你遇到的额外引号问题,本质是因为你的CSV文件其实是把每行完整的JSON当作单个CSV字段存储的——按照CSV的格式规则,包含特殊字符(比如双引号、逗号)的字段会被双引号包裹,字段内部的双引号会被转义成两个双引号("")。你之前的代码直接按普通文本行读取,没有处理CSV的这些格式规则,所以输出时保留了这些转义和外层包裹的引号。
给你两个靠谱的解决办法,推荐用第二种,更规范省心:
方法一:用CSV模块解析(推荐)
利用Python的csv模块自动处理CSV的格式规则,它会帮你自动去掉外层包裹的引号,同时把转义的""还原成单个":
import csv csv_file = 'path/to/my/file.csv' with open(csv_file, mode='r') as infile: # 创建CSV读取器,自动处理CSV的转义规则 reader = csv.reader(infile) for i, row in enumerate(reader): # 每行是一个列表,第一个元素就是处理后的纯JSON字符串 json_content = row[0] with open(f"row_{i}.json", "w") as outfile: outfile.write(json_content)
这个方法最稳妥,不管你的CSV里有没有其他特殊格式(比如字段里的逗号),csv.reader都会正确解析,完全不需要你手动处理字符串替换。
方法二:手动处理字符串(适合简单场景)
如果确定你的CSV每行都被外层双引号包裹,且内部的双引号都是转义成""的情况,可以直接手动处理:
csv_file = 'path/to/my/file.csv' with open(csv_file, mode='r') as infile: for i, line in enumerate(infile): # 去掉首尾的换行符和外层双引号 cleaned_line = line.strip().strip('"') # 把转义的""替换成单个" json_content = cleaned_line.replace('""', '"') with open(f"row_{i}.json", "w") as outfile: outfile.write(json_content)
不过这个方法有局限性,如果某些行没有外层引号,或者存在其他CSV格式的特殊情况,可能会出错,所以优先推荐方法一。
验证效果
用你给出的示例行测试,处理后输出的JSON文件内容会和你最开始的原始JSON完全一致:
{"key1":"string_value","key2":["string_value"],"key4":integer,"key5":[{"nested_key1":"string_value","nested_key2":boolean}],"key6":integer}
备注:内容来源于stack exchange,提问作者longhorn
相关产品推荐
相关产品推荐

