1

Имеется небольшая программа на Python 2, которая проходит по одному файлу с русскими словами и добавляет их в коллекцию, потом эта коллекция записывается в json файл

f = open("in.txt")
conversations = open("data/russian/conversations.json", "wb")
ar = {"conversations": []}

worker = []
for line in f:
    if line == "-----":
        ar["conversations"].append(worker)
        worker = []
    else:
        worker.append(line)
print ar["conversations"][0][0]
conversations.write(str(ar))
conversations.close()

В итоге в json файле я имею что-то подобное:

{'conversations': [['\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82!', '\xd0\x97\xd0\xb4\xd1\x80\xd0\xb0\xd0\xb2\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd0\xb9!', // и так далее

Вопрос заключается в следующем: как корректно выводить русские символы в файл? (.encode("utf-8") пытался, не помогло)

m9_psy
  • 6,449

1 Answers1

1

Ошибка у вас в том, что str(ar) это неправильный способ сохранить словарь как json. Tо что вы видите это текстовое представление байтовых строк в Питоне—ожидаемый результат при вызове str() на коллекцию—подобное однозначное представление полезно для отладки.

Используйте json модуль вместо этого: json.dump(ar, file).

Но и этого не достаточно в вашем случае: json это текстовый формат, а у вас код с байтами работает. Используйте io.open(filename, mode, encoding=character_encoding), чтобы читать/писать текст, а не байты из файла.

Также можно from __future__ import unicode_literals добавить наверху, чтобы руками u'' префикс перед каждой строковой константой не писать.

insolor
  • 49,104
jfs
  • 52,361