Reputation: 46303
Let
d = {3: u'blah', u'b': u'foo', (12,2,3) : u'bonjour'}
be a dictionary. If I use
g = yaml.dump(d)
h = yaml.load(g)
print g, h
it's very good, but I get lots of !!python/unicode
everywhere, so that's not good for readability.
On the other hand, if I use :
g = yaml.safe_dump(d)
h = yaml.load(g)
print g, h
there are no-more the !!python/unicode
but also not the !!python/tuple
anymore, so the load
doesn't work because the tuple isn't understood correctly.
How to get the right balance with YAML ?
!!python/unicode
everywhere,!!python/typle
has to be kept)Upvotes: 2
Views: 4048
Reputation: 312370
If you search for python yaml unicode, the very first result is this bug report, which has exactly the solution you're looking for. In short, register a custom representer for unicode strings, like this:
yaml.add_representer(unicode,
lambda dumper, value: dumper.represent_scalar(u'tag:yaml.org,2002:str', value))
With this in place, your example renders like this:
>>> d = {3: u'blah', u'b': u'foo', (12,2,3) : u'bonjour'}
>>> print yaml.dump(d)
3: blah
? !!python/tuple [12, 2, 3]
: bonjour
b: foo
Upvotes: 3