我有一个
my_yaml.yml
包含以下内容的文件:
my_yaml:
person: >
John|Doe|48,
Jack|Black|39
skills:
- name: superhero
abilities:
- swim
- run
special_chars:
- '! | " "'
- '+ | " "'
- '\ | " "'
- 'Ã | "A"'
- 'Ã | "E"'
- 'Å° | "U"'
- 'Ã | "U"'
我想把它装进去然后倒进
my_yaml_new.yml
与原始输入文件完全相同的格式和字符的文件。我的代码是:
import yaml
my_yaml = yaml.load(open('my_yaml.yml', encoding='utf8')) # without "utf8" encoding I get "'charmap' codec can't decode byte..." error
我可以
dump
它进入控制台但是
1)
订单
abilities
&安培;
name
已更改:(
yaml.dump(my_yaml, default_flow_style=False, allow_unicode=True)
结果是:
'my_yaml:\n person: >\n John|Doe|48, Jack|Black|39\n skills:\n - abilities:\n - swim\n - run\n name: superhero\n special_chars:\n - \'! | " "\'\n - + | " "\n - \\ | " "\n - Ã | "A"\n - Ã | "E"\n - Å° | "U"\n - Ã | "U"\n'
当我试图将其转储到一个文件中时:
with open('my_yaml_new.yml', 'w') as outfile:
yaml.dump(my_yaml, outfile, default_flow_style=False, allow_unicode=True)
(二)
由于角色原因,我得到以下错误
Ã
以下内容:
unicodeencodeerror:'charmap'编解码器无法在中编码字符'\xdb'
位置0:字符映射到未定义
如果我从输入中删除此行
我的“yaml.yml”
然后上面的文件转储成功,但是
3)
我的多行在
person
字符串进入一行:(
my_yaml:
person: >
John|Doe|48, Jack|Black|39
skills:
- abilities:
- swim
- run
name: superhero
special_chars:
- '! | " "'
- + | " "
- \ | " "
- Ã | "A"
- Ã | "E"
- Å° | "U"
(四)
我的单引号(“)也从
special_chars
注意:(
5)
还要注意的是
skills
没有缩进:.(
我试过了
these
没有成功的解决方案。也没有
import ruamel.yaml as yaml
有帮助。
更新
好的,下面的大包装解决了问题
1)
&安培;
(四)
,我可以替换
>
到
|
多行值,所以
3)
也解决了。也许
5)
不是一个大问题。但我仍然在和一些特殊的人物斗争,比如
_
或
Ç
所以我仍在寻找解决问题的方法
(二)
……
from ruamel import yaml
my_yaml = yaml.round_trip_load(open('dmy_yaml.yml', encoding='utf8'), preserve_quotes=True)
with open('my_yaml_new.yml', 'w') as outfile:
yaml.round_trip_dump(my_yaml, outfile, default_flow_style=False, allow_unicode=True)