all*_*rry 7 python csv unicode yaml python-3.x
我正在尝试使用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, ?????? ????????
Run Code Online (Sandbox Code Playgroud)
当前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"
Run Code Online (Sandbox Code Playgroud)
期望的YAML输出
- id: 1
title_english: A Title in English
title_russian: ???????? ?? ???????
- id: 2
title_english: Another Title
title_russian: ?????? ????????
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
谢谢!
我遇到了同样的问题,这就是我能够根据你上面的例子解决它的方法
out_file.write(yaml.dump(items, default_flow_style=False,allow_unicode=True) )
Run Code Online (Sandbox Code Playgroud)
包括allow_unicode=True修复问题.
也专门为python2使用safe_dump而不是dump防止!!python/unicode与unicode文本一起显示.
out_file.write(yaml.safe_dump(items, default_row_style=False,allow_unicode=True)
Run Code Online (Sandbox Code Playgroud)