Я работаю с файлами yaml, которые должны быть доступны для чтения и редактирования человеком, но также будут редактироваться из кода Python. Я использую Python 2.7.3
Файл должен обрабатывать акценты (в основном для обработки текста на французском языке).
Вот пример моей проблемы:
import codecs
import yaml
file = r'toto.txt'
f = codecs.open(file,"w",encoding="utf-8")
text = u'héhéhé, hûhûhû'
textDict = {"data": text}
f.write( 'write unicode : ' + text + '\n' )
f.write( 'write dict : ' + unicode(textDict) + '\n' )
f.write( 'yaml dump unicode : ' + yaml.dump(text))
f.write( 'yaml dump dict : ' + yaml.dump(textDict))
f.write( 'yaml safe unicode : ' + yaml.safe_dump(text))
f.write( 'yaml safe dict : ' + yaml.safe_dump(textDict))
f.close()
Записанный файл содержит:
write unicode : héhéhé, hûhûhû
write dict : {'data': u'h\xe9h\xe9h\xe9, h\xfbh\xfbh\xfb\n'}
yaml dump unicode : "h\xE9h\xE9h\xE9, h\xFBh\xFBh\xFB"
yaml dump dict : {data: "h\xE9h\xE9h\xE9, h\xFBh\xFBh\xFB"}
yaml safe unicode : "h\xE9h\xE9h\xE9, h\xFBh\xFBh\xFB"
yaml safe dict : {data: "h\xE9h\xE9h\xE9, h\xFBh\xFBh\xFB"}
Дамп yaml отлично работает для загрузки с помощью yaml, но он не читается человеком.
Как вы можете видеть в коде примера, результат тот же, когда я пытаюсь написать Unicode-представление словаря (я не знаю, связано это или нет).
Я бы хотел, чтобы дамп содержал текст с акцентом, а не код юникода. Это возможно ?
yaml.safe_dump
, который выводит данные в формате, не зависящем от реализации, а не в формате, специфичном для Python. - person deceze♦   schedule 30.03.2015