为什么读取CSV存储的Python字典时,值中会出现反斜杠转义字符?
反斜杠出现的原因
- 存储环节的类型转换问题:你调用
writer.writerow([key, value])写入CSV时,value本身是谷歌API返回的列表/字典类型,csv.writer会自动调用str()方法把它转为字符串格式再写入,没有保留原生的结构化数据类型。 - 显示层面的转义逻辑:CSV标准规定,如果字段内容包含引号、逗号等特殊字符,写入时会自动给整个字段套双引号,同时把字段内部的双引号转义为两个连续的双引号(就是你用
cat命令看到的""I'll""格式)。csv.reader读取时会自动把两个双引号还原为单个,此时你拿到的是包含单/双引号的普通字符串,Python打印字符串的字面量形式时,会给字符串内部的引号加反斜杠做转义显示,这些反斜杠只是Python的展示形式,并不是字符串的实际内容。
解析为普通Python字典的方法
你可以用ast.literal_eval把读取到的字符串形式的结构化数据,还原为原生的Python列表/字典对象,修改后的读取代码如下:
import csv import ast reader = csv.reader(open('out.csv', 'r')) d = {} for row in reader: k, v = row # 字符串转Python原生结构化对象 d[k] = ast.literal_eval(v)
转换完成后你就可以正常按键取值,比如d['results'][0]['alternatives']这类操作都可以正常执行。
如果你后续还有类似的结构化数据存储需求,直接用JSON格式会比CSV更适配,不需要额外处理类型转换问题,参考代码如下:
存储代码:import json import proto response_json = proto.Message.to_dict(response) with open('out.json', 'w', encoding='utf-8') as f: json.dump(response_json, f, ensure_ascii=False, indent=2)读取代码:
import json with open('out.json', 'r', encoding='utf-8') as f: d = json.load(f)
内容的提问来源于stack exchange,提问作者connor449
相关产品推荐
相关产品推荐

