如何使用格式转义双引号?

how to escape double quotes with formatting?

我有一个包含列的 csv,

Column_one | Column_two

 1         | apple
 2         | orange
...
import csv
import json

rows=[]
dataRow = {}
with open('input.csv', mode='r') as csvFile:
    csvReader = csv.DictReader(csvFile)
    for row in csvReader:
        rows.append('"{0}":"{1}"'.format(row["Column_one"], row["Column_two"]))
    with open('output.json', 'w') as output_file:
        output_file.write(json.dumps(rows))

我正在格式化输出以便我可以得到这样的输出文件

{"1" : "apple"}
{"2" : "orange"}

但我得到以下结果,我尝试通过在双引号前面添加反冲来转义双引号,但这只会让我在引号前面出现双反冲

{\"1\": \"apple:\"}, 
{\"2\" : \"orange\"}

你可以这样试试

import csv
import json

rows=[]
dataRow = {}
with open('input.csv', mode='r') as csvFile:
    csvReader = csv.DictReader(csvFile)
    for row in csvReader:
        rows.append(dict(row["Column_one"]: row["Column_two"]))
    with open('output.json', 'w') as output_file:
        output_file.write(json.dumps(rows, indent=4))

您正在手动创建一个看起来像 JSON 的字符串,然后用 json.dumps 再次对其进行编码,因此您得到了 JSON 的 JSON 化版本字符串。

如果需要,您可以手动编写JSON:

>>> print('{{"{}":"{}"}}'.format('1', 'apple'))
{"1":"apple"}

或者(最好)您可以使用 json 模块将字典编码为 JSON:

>>> print(json.dumps({'1':'apple'}))
{"1": "apple"}

但是如果你同时执行这两个操作,你会得到一个已经 JSON 化的字符串的 JSON 表示,如下所示:

>>> print(json.dumps('{{"{}":"{}"}}'.format('1', 'apple')))
"{\"1\":\"apple\"}"

如果您希望每行 单个对象 ,则不能转储整个列表。

分离您的关注点 - 将文件解析为字典行,然后编写一个新行。

import csv
def csv2dict(filename):
  with open(filename) as f:
    reader = csv.DictReader(f)
    h1, h2 = reader.fieldnames[:2]
    for r in reader:
      yield {r[h1]:r[h2]}
      # Or to get all column headers to their values
      # yield {f:r[f] for f in reader.fieldnames}

import json
with open('output.json', 'w') as f:
  for d in csv2dict('input.csv'):
    json.dump(d, f)
    f.write('\n')

产出

{"1": "apple"}
{"2": "orange"}

注意:您并不是真的需要 DictReader;常规 csv.Reader 具有对列的索引访问权限。