Python json.dumps()将JSON字符串写入CSV

pxy2qtax  于 2023-09-27  发布在  Python
关注(0)|答案(1)|浏览(90)

我正在写入一个CSV文件,其中一个列值是一个大JSON字符串。我试图理解如何转义JSON中的逗号值,这样它就不会将它们作为CSV文件中的单独列写入。
我需要这个解决方案,而不使用传统的csv库,因为我想更好地了解将数据写入文件。

import json

# Emulating the process
d: dict = {"foo":"bar", "py": "pi"}
json_list: list[str] = [json.dumps(d)]

with open("file_test.csv", mode='a+') as f:
    f.write('col_a,')
    f.write('col_b,'+ '\n')
    f.write(','.join(json_list)+'\n')

输出是一个CSV,类似于:

col_a,col_b
"{""foo"": ""bar"""," ""py"": ""pi""}"

我只想填充一列(col_B为空)。我是否必须用转义逗号替换json字符串中的每个逗号(字符串可能有几MB大),或者使用内置的json方法有更好的方法吗?

8iwquhpp

8iwquhpp1#

您应该将值用引号括起来,并转义所有其他引号,如下所示:

import json

d: dict = {"foo":"bar", "py": "pi"}
json_list: list[str] = [json.dumps(d)]

with open("file_test.csv", mode='a+') as f:
    f.write('col_a,')
    f.write('col_b,'+ '\n')
    cell = ','.join(json_list)
    escaped = cell.replace('"', '""')
    f.write('"' + escaped + '"\n')

如果你想让它更简单,我建议你使用csv模块或者使用制表符分隔。
如果你真的想让json_list中的每一项都在新的一行(但只在第一列),使用这个:

import json

d: dict = {"foo":"bar", "py": "pi"}
json_list: list[str] = [json.dumps(d)]

with open("file_test.csv", mode='a+') as f:
    f.write('col_a,')
    f.write('col_b,'+ '\n')
    for cell in json_list:
        escaped = cell.replace('"', '""')
        f.write('"' + escaped + '"\n')

相关问题