Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 2, 2014 12:42:11

acme_ag
Зарегистрирован: 2014-07-31
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

Есть текстовый файл с набором строк. Текст на русском, что-то типа такого:

Строка один
Строка два
Строка три
...

Нужно преобразовать контент в список и сохранить в другой файл.
С текстом на латинице все в порядке. С кириллицей получить на выходе текст на русском не получается – выходит что-то такое:

клей полиграфия

Код
with open("input.txt", "r") as textfile:
    a = [line.strip() for line in textfile]
file = open('output.txt', 'w')
file.write(str(a))
file.close()

Кодировка сбивается на этапе .strip()
Пробовал задействовать codecs, менять кодировку исходного файла, с IDE, без IDE… Инет читал.

Поскольку я новичок в Python, просьба не просто бросить ссылку на мануал (или еще куда-то), а объяснить, как решать такие проблемы.

Отредактировано acme_ag (Сен. 2, 2014 12:42:34)

Офлайн

#2 Сен. 2, 2014 13:16:52

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

Какая кодировка в исходном файле? Какая операционая система?
Строчка, подобная этой, в начале файле скрипта присутствует?

#-*-coding:utf8-*-

Отредактировано Alen (Сен. 2, 2014 13:17:46)

Офлайн

#3 Сен. 2, 2014 13:35:51

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

acme_ag
Кодировка сбивается на этапе .strip()
В приложении, мы работаем только с Unicode.
Если Python2, то следуй PEP 263, сообщай о кодировке интерпретатору: #-*-coding:utf8-*-

acme_ag
как решать такие проблемы.
Пришёл текст в приложение, декодировал в Unicode, поработал с ним,
нужно сохранить\передать, закодировал и сохранил\передал дальше.



Отредактировано Budulianin (Сен. 2, 2014 14:02:26)

Офлайн

#4 Сен. 2, 2014 13:59:06

acme_ag
Зарегистрирован: 2014-07-31
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

Win7, python 2.7.6, использую PyScripter/notepad++/Sublime text2

#-*-coding:utf8-*- – это указывал.
В исходнике были utf-8 w/o BOM, utf-8, ansi…. да в какой-то момент я просто пробовал все подряд. Создавал пустой файл в utf-8 и вручную вписывал тестовый текст. Использовал notepad, notepad++, эксель (я уже говорил, что использовал все подряд?).
На выходе либо это

['\xd1\x82\xd0\xb5\xd1\x80\... ']
либо это
клей полиграфия
в зависимости от манипуляций с .codecs()

Офлайн

#5 Сен. 2, 2014 14:04:53

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

acme_ag
На выходе либо это

Где на выходе? в консоли ?

acme_ag
['\xd1\x82\xd0\xb5\xd1\x80\... ']
Это нормальное отображение в интерактивной оболочке.
acme_ag
клей полиграфия
А это, значит, что у тебя консоль не настроена под нужную кодировку.



Отредактировано Budulianin (Сен. 2, 2014 14:10:10)

Офлайн

#6 Сен. 2, 2014 14:08:33

acme_ag
Зарегистрирован: 2014-07-31
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

и в консоли, и в output.txt

Офлайн

#7 Сен. 2, 2014 14:21:53

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

acme_ag

Попробуй создать файл в utf-8
прописать там #-*-coding:utf8-*- первой строкой, прописать строку s = u'русские буквы'
закодировать строку в utf-8 и записать её в файл.

Всё должно быть нормально.



Офлайн

#8 Сен. 2, 2014 14:38:50

acme_ag
Зарегистрирован: 2014-07-31
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

Хоть раздел, вроде, и для таких, как я, все же извиняюсь за тупак и несообразительность.

1. создаю файл input.txt (например), в utf-8
2. в нем первой строкой пишу #-*-coding:utf8-*
ок. пока понятно.

3. в нем же второй строкой пишу s = u'русские буквы'?
4. закодировать строку в utf-8 и записать её в файл – какую и как?

Офлайн

#9 Сен. 2, 2014 14:42:00

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

acme_ag
3. в нем же второй строкой пишу s = u'русские буквы'?

Две пустые строки(для читаемости) и потом пиши: s = u'русские буквы'

Потом
s_encode = s.encode('utf-8')

Потом пиши эту закодированную строку в файл и смотри что в нём.



Отредактировано Budulianin (Сен. 2, 2014 14:52:15)

Офлайн

#10 Сен. 2, 2014 16:06:59

acme_ag
Зарегистрирован: 2014-07-31
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

проблема с кодировкой: текст из файла в список

В консоли ошибка:
'ascii' codec can't decode byte 0xd1 in position 26…

Отредактировано acme_ag (Сен. 2, 2014 16:13:07)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version