Home > Enterprise >  how to decode file when writing in yaml format
how to decode file when writing in yaml format

Time:10-20

I am trying to write a dictionary file that contains Tibetan language word into yaml format. Problem is i couldn't encode/decode the file when writing the yaml file.

Here is code :

    with open('tibetan_dict.yml', 'w', encoding='utf-8') as outfile:
        yaml.dump(tibetan_dict, outfile, default_flow_style=False)

tibetan_dict contains:

{'ཀ་ཅ': '༡.་ནོར་རྫས་ཀྱི་སྤྱི་མིང་སྟེ། ཀ་ཅ་གསོག་འཇོག་ཀ་ཅས་ཚིམ་པར་བྱེད་ཅེས་པ་ལྟ་བུ།༢.འཚོ་བའི་ཡོ་བྱད་ཀྱི་སྤྱི་མིང་སྟེ། སྣོད་ཀ་ཅ་ཞེས་པ་ལྟ་བུ།', 
'ཀ་ཅི': 'རས་ཆ་ཞིག་གི་མིང་།', 
'ཀ་ཏོ་ར': 'གཞོང་བ་ལྟ་བུའི་ཟས་སྣོད་ཅིག་གི་མིང་སྟེ། }

OUTPUT i am getting :

"\u0F40\u0F0B\u0F45": "\u0F21.\u0F0B\u0F53\u0F7C\u0F62\u0F0B\u0F62\u0FAB\u0F66\u0F0B\
  \u0F40\u0FB1\u0F72\u0F0B\u0F66\u0FA4\u0FB1\u0F72\u0F0B\u0F58\u0F72\u0F44\u0F0B\u0F66\
  \u0F9F\u0F7A\u0F0D \u0F40\u0F0B\u0F45\u0F0B\u0F42\u0F66\u0F7C\u0F42\u0F0B\u0F60\u0F47\
  \u0F7C\u0F42\u0F0B\u0F40\u0F0B\u0F45\u0F66\u0F0B\u0F5A\u0F72\u0F58\u0F0B\u0F54\u0F62\
  \u0F0B\u0F56\u0FB1\u0F7A\u0F51\u0F0B\u0F45\u0F7A\u0F66\u0F0B\u0F54\u0F0B\u0F63\u0F9F\
  \u0F0B\u0F56\u0F74\u0F0D\u0F22.\u0F60\u0F5A\u0F7C\u0F0B\u0F56\u0F60\u0F72\u0F0B\u0F61\
  \u0F7C\u0F0B\u0F56\u0FB1\u0F51\u0F0B\u0F40\u0FB1\u0F72\u0F0B\u0F66\u0FA4\u0FB1\u0F72\
  \u0F0B\u0F58\u0F72\u0F44\u0F0B\u0F66\u0F9F\u0F7A\u0F0D \u0F66\u0FA3\u0F7C\u0F51\u0F0B\
  \u0F40\u0F0B\u0F45\u0F0B\u0F5E\u0F7A\u0F66\u0F0B\u0F54\u0F0B\u0F63\u0F9F\u0F0B\u0F56\
  \u0F74\u0F0D"
"\u0F40\u0F0B\u0F45\u0F72": "\u0F62\u0F66\u0F0B\u0F46\u0F0B\u0F5E\u0F72\u0F42\u0F0B\
  \u0F42\u0F72\u0F0B\u0F58\u0F72\u0F44\u0F0B\u0F0D"

CodePudding user response:

If you want non-ascii characters in the yaml output, you need to pass allow_unicode=True when dumping.

>>> yaml.dump(tibetan_dict)
'"\\u0F40\\u0F0B\\u0F45": "\\u0F21.\\u0F0B\\u0F53\\u0F7C\\u0F62\\u0F0B\\u0F62\\u0FAB\\u0F66\\u0F0B\\\n  \\u0F40\\u0FB1\\u0F72\\u0F0B\\u0F66\\u0FA4\\u0FB1\\u0F72\\u0F0B\\u0F58\\u0F72\\u0F44\\u0F0B\\u0F66\\\n  \\u0F9F\\u0F7A\\u0F0D \\u0F40\\u0F0B\\u0F45\\u0F0B\\u0F42\\u0F66\\u0F7C\\u0F42\\u0F0B\\u0F60\\u0F47\\\n  \\u0F7C\\u0F42\\u0F0B\\u0F40\\u0F0B\\u0F45\\u0F66\\u0F0B\\u0F5A\\u0F72\\u0F58\\u0F0B\\u0F54\\u0F62\\\n  \\u0F0B\\u0F56\\u0FB1\\u0F7A\\u0F51\\u0F0B\\u0F45\\u0F7A\\u0F66\\u0F0B\\u0F54\\u0F0B\\u0F63\\u0F9F\\\n  \\u0F0B\\u0F56\\u0F74\\u0F0D\\u0F22.\\u0F60\\u0F5A\\u0F7C\\u0F0B\\u0F56\\u0F60\\u0F72\\u0F0B\\u0F61\\\n  \\u0F7C\\u0F0B\\u0F56\\u0FB1\\u0F51\\u0F0B\\u0F40\\u0FB1\\u0F72\\u0F0B\\u0F66\\u0FA4\\u0FB1\\u0F72\\\n  \\u0F0B\\u0F58\\u0F72\\u0F44\\u0F0B\\u0F66\\u0F9F\\u0F7A\\u0F0D \\u0F66\\u0FA3\\u0F7C\\u0F51\\u0F0B\\\n  \\u0F40\\u0F0B\\u0F45\\u0F0B\\u0F5E\\u0F7A\\u0F66\\u0F0B\\u0F54\\u0F0B\\u0F63\\u0F9F\\u0F0B\\u0F56\\\n  \\u0F74\\u0F0D"\n"\\u0F40\\u0F0B\\u0F45\\u0F72": "\\u0F62\\u0F66\\u0F0B\\u0F46\\u0F0B\\u0F5E\\u0F72\\u0F42\\u0F0B\\\n  \\u0F42\\u0F72\\u0F0B\\u0F58\\u0F72\\u0F44\\u0F0B\\u0F0D"\n"\\u0F40\\u0F0B\\u0F4F\\u0F7C\\u0F0B\\u0F62": "\\u0F42\\u0F5E\\u0F7C\\u0F44\\u0F0B\\u0F56\\u0F0B\\\n  \\u0F63\\u0F9F\\u0F0B\\u0F56\\u0F74\\u0F60\\u0F72\\u0F0B\\u0F5F\\u0F66\\u0F0B\\u0F66\\u0FA3\\u0F7C\\\n  \\u0F51\\u0F0B\\u0F45\\u0F72\\u0F42\\u0F0B\\u0F42\\u0F72\\u0F0B\\u0F58\\u0F72\\u0F44\\u0F0B\\u0F66\\\n  \\u0F9F\\u0F7A\\u0F0D "\n'
>>> yaml.dump(tibetan_dict, allow_unicode=True)
"ཀ་ཅ: ༡.་ནོར་རྫས་ཀྱི་སྤྱི་མིང་སྟེ། ཀ་ཅ་གསོག་འཇོག་ཀ་ཅས་ཚིམ་པར་བྱེད་ཅེས་པ་ལྟ་བུ།༢.འཚོ་བའི་ཡོ་བྱད་ཀྱི་སྤྱི་མིང་སྟེ།\n  སྣོད་ཀ་ཅ་ཞེས་པ་ལྟ་བུ།\nཀ་ཅི: རས་ཆ་ཞིག་གི་མི
 ་།\nཀ་ཏོ་ར: 'གཞོང་བ་ལྟ་བུའི་ཟས་སྣོད་ཅིག་གི་མིང་སྟེ། '\n"

Note that both of these are valid yaml though, and will deserialize to the same value.

  • Related