Форум сайта python.su
0
Добрый день!
Python 3.3
Возникает следующая проблема:
# -*- coding: utf-8 -*-
import yaml
data = {'a' : ‘niedostępna’, ‘b’ : ‘недоступна’}
with open('файл', “w”) as file:
yaml.dump(data, file, default_flow_style=False, indent=4)
load_file = yaml.load(open('файл'))
print(load_file)
Результат:
{'a': ‘niedostępna’, ‘b’: ‘недоступна’}
То есть, видим, что используется польский и русский язык.
Работает нормально, но с одним небольшим “но” - в записанном файле видим:
a: “niedost\u0119pna”
b: “\u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430”
Хотелось бы в файле получить нормальную запись, потому что, как видите, совершенно нечитаемо.
Если делать:
yaml.dump(data, file, default_flow_style=False, indent=4, allow_unicode=True)
То получаем ошибку:
UnicodeEncodeError: ‘charmap’ codec can't encode character ‘\u0119’ in position 7: character maps to <undefined>
Если оставить один русский, то работает нормально, но надо чтобы работало и то и то.
Подскажите, пожалуйста, как можно это победить?
Отредактировано jor77 (Июль 9, 2014 00:19:22)
Офлайн
857
#!/usr/bin/env python3 import yaml data = {'a': 'niedostępna', 'b' : 'недоступна'} with open('file.txt', 'w', encoding='utf-8') as fout: yaml.dump(data, fout, indent=4, default_flow_style=False, allow_unicode=True) with open('file.txt', encoding='utf-8') as fin: load_file = yaml.load(fin) print(load_file)
[guest@localhost yml]$ ./yml.py
{'b': 'недоступна', 'a': 'niedostępna'}
[guest@localhost yml]$ cat file.txt
a: niedostępna
b: недоступна
[guest@localhost yml]$
Отредактировано py.user.next (Июль 9, 2014 06:30:05)
Офлайн
0
Спасибо! Работает!
Вот только не понимаю, почему работает, когда указываешь кодировку файла, но не работает, когда указываешь при дампе в yaml?
Офлайн
857
jor77Это не из-за кодировки файла, а из-за параметра allow_unicode.
почему работает, когда указываешь кодировку файла
Офлайн