首页 > 解决方案 > Python将字符串写入CSV而不引用

问题描述

我有这个片段:

import csv
data_list = [
    {"id": 123, "raw_json": '{"project_id": 100, "name": "ABC", "created_at": "2020-06-27T15:23:09Z"}'},
    {"id": 456, "raw_json": '{"project_id": 200, "name": "XYZ", "created_at": "2018-06-27T15:23:09Z"}'}
]

### ^ NOTE: `raw_json` are JSON strings

with open("/tmp/test", "w") as outfile_fd:
    writer = csv.DictWriter(
        outfile_fd,
        fieldnames=["id", "raw_json"],
        delimiter="\t",
        quoting=csv.QUOTE_MINIMAL
    )
    for rowdict in data_list:
        writer.writerow(rowdict)

现在我检查输出文件$ cat /tmp/test ,它显示

123     "{""project_id"": 100, ""name"": ""ABC"", ""created_at"": ""2020-06-27T15:23:09Z""}"
456     "{""project_id"": 200, ""name"": ""XYZ"", ""created_at"": ""2018-06-27T15:23:09Z""}"

我如何摆脱引用?所需文件如下所示:

123     {"project_id": 100, "name": "ABC", "created_at": "2020-06-27T15:23:09Z"}
456     {"project_id": 200, "name": "XYZ", "created_at": "2018-06-27T15:23:09Z"}

谢谢!

标签: pythoncsvformatting

解决方案


更改您的输入数据

data_list = [
    {"id": 123, "raw_json": '{"project_id": 100, "name": "ABC", "created_at": "2020-06-27T15:23:09Z"}'},
    {"id": 456, "raw_json": '{"project_id": 200, "name": "XYZ", "created_at": "2018-06-27T15:23:09Z"}'}
]

到:

data_list = [
    {"id": 123, "raw_json": {"project_id": 100, "name": "ABC", "created_at": "2020-06-27T15:23:09Z"}},
    {"id": 456, "raw_json": {"project_id": 200, "name": "XYZ", "created_at": "2018-06-27T15:23:09Z"}}
]

经过这些更改后,输出为: 脚本的示例输出

或者

您可以使用此更新的代码:

import csv
data_list = [
    {"id": 123, "raw_json": '{"project_id": 100, "name": "ABC", "created_at": "2020-06-27T15:23:09Z"}'},
    {"id": 456, "raw_json": '{"project_id": 200, "name": "XYZ", "created_at": "2018-06-27T15:23:09Z"}'}
]

### ^ NOTE: `raw_json` are JSON strings

with open("/tmp/test", "w") as outfile_fd:
    writer = csv.DictWriter(
        outfile_fd,
        fieldnames=["id", "raw_json"],
        delimiter="\t",
        quoting=0
    )
    for rowdict in data_list:
        try:
            rowdict['raw_json'] = eval(rowdict['raw_json'])
        except:
            pass
        writer.writerow(rowdict)

输出: 样本输出


推荐阅读