如何使用格式转义双引号?
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
具有对列的索引访问权限。
我有一个包含列的 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
具有对列的索引访问权限。