我使用pyyaml将一个对象转储到一个文件。对象中有几个unicode字符串。我以前也这样做过,但现在它产生的输出项如下:
'item': !!python/unicode "some string"
而不是期望的:
'item': 'some string'
我打算输出为utf-8。我当前使用的命令是:
yaml.dump(data,file(suite_out,'w'),encoding='utf-8',indent=4,allow_unicode=True)
在其他位置,我执行以下操作,并且它工作正常:
codecs.open(suite_out,"w","utf-8").write(
yaml.dump(suite,indent=4,width=10000)
)
我做错了什么?
Python 2.7.3
发布于 2013-12-04 15:57:40
我尝试了许多组合,我能找到的唯一一个始终生成正确的YAML输出的组合是:
yaml.safe_dump(data, file(filename,'w'), encoding='utf-8', allow_unicode=True)
发布于 2020-06-05 11:16:09
受到公认的答案的启发,即safe_dump
可以产生预期的结果,我检查了python2.7/site-packages/yaml/representer.py
的源代码,发现dump
的Representer
和safe_dump
的unicode
使用了不同的表示函数。
并且可以用add_representer
覆盖表示函数。因此,您可以只从SafeRepresenter
获取表示函数,并注册它以便在dump
中使用。
我必须这样做,因为我有一些自定义类型,所以我不能使用safe_dump
。
代码如下:
def represent_unicode(dumper, data):
return dumper.represent_scalar(u'tag:yaml.org,2002:str', data)
yaml.add_representer(unicode, represent_unicode)
我生成输出的命令:
yaml.dump(yml, encoding='utf-8', allow_unicode=True, default_flow_style=False, explicit_start=True)
python版本是2.7.5,PyYMAL是3.10。
https://stackoverflow.com/questions/20352794
复制相似问题