我正在尝试使用Python 3.4将包含Unicode字符串的CSV文件转换为YAML文件。
目前,YAML解析器将我的Unicode文本转义为ASCII字符串。我希望YAML解析器将Unicode字符串导出为一个Unicode字符串,而不需要转义字符。当然,我在这里有点误会,我很感激你的帮助。
加分:在Python 2.7中如何做到这一点?
CSV输入
id, title_english, title_russian
1, A Title in English, Название на русском
2, Another Title, Другой Название
当前YAML输出
- id: 1
title_english: A Title in English
title_russian: "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043D\u0430\
\ \u0440\u0443\u0441\u0441\u043A\u043E\u043C"
- id: 2
title_english: Another Title
title_russian: "\u0414\u0440\u0443\u0433\u043E\u0439 \u041D\u0430\u0437\u0432\u0430\
\u043D\u0438\u0435"
所需的YAML输出
- id: 1
title_english: A Title in English
title_russian: Название на русском
- id: 2
title_english: Another Title
title_russian: Другой Название
Python转换代码
import csv
import yaml
in_file = open('csv_file.csv', "r")
out_file = open('yaml_file.yaml', "w")
items = []
def convert_to_yaml(line, counter):
item = {
'id': counter,
'title_english': line[0],
'title_russian': line[1]
}
items.append(item)
try:
reader = csv.reader(in_file)
next(reader) # skip headers
for counter, line in enumerate(reader):
convert_to_yaml(line, counter)
out_file.write( yaml.dump(items, default_flow_style=False) )
finally:
in_file.close()
out_file.close()
谢谢!
在Python2.x中,应该使用Unicode CSV读取器,因为Python的CSV读取器不支持该功能。您可以为此目的使用unicodecsv。
在当前的Python3.x代码中,打开文件时应显式传递文件编码:
可能您的系统已经在做正确的事情,但在这种情况下,您依赖于默认值。
最后,您需要确保以正确的编码打开YAML文件:
open("yaml_file.yaml", "w", encoding="utf-8")
。这种编码应该在以后读取YAML文件时使用。我不确定给定Python对象时
yaml
库会做什么,但是当您在convert_to_yaml
内设置line[0]
和line[1]
时,还需要检查它们是否是Unicode字符串。我遇到了同样的问题,这就是我如何根据上面的例子解决它的方法
包括
allow_unicode=True
可以解决这个问题。还特别针对python2,使用
safe_dump
而不是dump
来防止!!python/unicode
与unicode文本一起显示。相关问题 更多 >
编程相关推荐