[Python] строки в utf-8 из файла
От: theTosh Россия  
Дата: 29.06.09 14:41
Оценка:
Читаю строки из файла, который может содержать кириллицу в utf-8:

app=QtGui.QApplication(sys.argv)
fp=open('lbl.capt')
lbl_caption=fp.readline()
fp.close()
lbl=QtGui.QLabel(lbl_caption)
lbl.show()
sys.exit(app.exec_())


В результате отображаются кракозябры. unicode(fp.readline()) не работает, что и понятно.

Вопрос: как(чем) правильно читать/писать юникодные файлы? Предполагаю, что нужно использовать модуль codecs. Я правильно думаю, или есть более python-way?

Если это важно: Debian Lenny, locale: en_US.UTF-8, Python 2.5.4.
/Best regards,
Anton V. Deinow
python utf-8
Re: [Python] строки в utf-8 из файла
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 29.06.09 15:54
Оценка:
Здравствуйте, theTosh, Вы писали:

T>Вопрос: как(чем) правильно читать/писать юникодные файлы? Предполагаю, что нужно использовать модуль codecs. Я правильно думаю, или есть более python-way?


У прочтённых строк вызвать decode(). Ну да, это тот же codecs в итоге.
Варианта назначить encoding файлу для автоконверсии (как в перле) нет, атрибут encoding есть, но read-only. Возможность назначить encoding при открытии появилась только в 3.0.
The God is real, unless declared integer.
Re[2]: [Python] строки в utf-8 из файла
От: theTosh Россия  
Дата: 29.06.09 16:39
Оценка:
Здравствуйте, netch80, Вы писали:

T>>Вопрос: как(чем) правильно читать/писать юникодные файлы? Предполагаю, что нужно использовать модуль codecs. Я правильно думаю, или есть более python-way?


N>У прочтённых строк вызвать decode(). Ну да, это тот же codecs в итоге.

N>Варианта назначить encoding файлу для автоконверсии (как в перле) нет, атрибут encoding есть, но read-only. Возможность назначить encoding при открытии появилась только в 3.0.

А я вот тут нашел codecs.open(fname,encoding='utf-8') -- вроде правильно работает. Т.е. encoding прямо при открытии назначается. Или это нечто некошерное? Протестировал такие варианты:

1)
fp=open('test.in')
s=fp.readline().decode('utf-8').rstrip()
fp.close()
"""тут чо-то делаем"""
fp=open('test.out','w')
fp.write(s.encode('utf-8')+'\n')
fp.close()

2)
import codecs

fp=codecs.open('test.in',mode='r',encoding='utf-8')
s=fp.readline().rstrip()
fp.close()
"""тут чо-то делаем"""
fp=codecs.open('test.out'),mode='w',encoding='utf-8')
fp.write(s+'\n')
fp.close()


Результаты, на первый взгляд, одинаковые. Какому варианту отдать предпочтение? И почему?
/Best regards,
Anton V. Deinow
Re[3]: [Python] строки в utf-8 из файла
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 29.06.09 19:42
Оценка:
Здравствуйте, theTosh, Вы писали:

T>А я вот тут нашел codecs.open(fname,encoding='utf-8') -- вроде правильно работает.


Хм, тоже вариант. "Слона-то я и не заметил"

T>Результаты, на первый взгляд, одинаковые. Какому варианту отдать предпочтение? И почему?


Наверно, через codecs.open — ибо меньше ошибок совершишь.
The God is real, unless declared integer.
Re[4]: Решено: [Python] строки в utf-8 из файла
От: theTosh Россия  
Дата: 29.06.09 19:57
Оценка:
Здравствуйте, netch80, Вы писали:

T>>А я вот тут нашел codecs.open(fname,encoding='utf-8') -- вроде правильно работает.


N>Хм, тоже вариант. "Слона-то я и не заметил"


T>>Результаты, на первый взгляд, одинаковые. Какому варианту отдать предпочтение? И почему?


N>Наверно, через codecs.open — ибо меньше ошибок совершишь.


Большое спасибо. Пожалуй, тему можно считать закрытой.
/Best regards,
Anton V. Deinow
Re: [Python] строки в utf-8 из файла
От: HiSH Россия http://m0riarty.ya.ru
Дата: 30.06.09 13:05
Оценка:
Здравствуйте, theTosh, Вы писали:

T>Читаю строки из файла, который может содержать кириллицу в utf-8:


T>
T>app=QtGui.QApplication(sys.argv)
T>fp=open('lbl.capt')
T>lbl_caption=fp.readline()
T>fp.close()
T>lbl=QtGui.QLabel(lbl_caption)
T>lbl.show()
T>sys.exit(app.exec_())
T>


T>В результате отображаются кракозябры. unicode(fp.readline()) не работает, что и понятно.

А почему не работает-то? unicode(fp.readling(), "utf-8") — тоже никакого результата?
Re[2]: [Python] строки в utf-8 из файла
От: theTosh Россия  
Дата: 30.06.09 18:33
Оценка:
Здравствуйте, HiSH, Вы писали:

T>>
T>>app=QtGui.QApplication(sys.argv)
T>>fp=open('lbl.capt')
T>>lbl_caption=fp.readline()
T>>fp.close()
T>>lbl=QtGui.QLabel(lbl_caption)
T>>lbl.show()
T>>sys.exit(app.exec_())
T>>


T>>В результате отображаются кракозябры. unicode(fp.readline()) не работает, что и понятно.

HSH>А почему не работает-то? unicode(fp.readling(), "utf-8") — тоже никакого результата?

О! Еще один вариант.

Итак, имеем:

1) используем str.decode()
fp=open('file.name')
s=fp.readline().decode('utf-8').rstrip()


2) используем модуль codecs
import codecs
fp=codecs.open('file.name',encoding='utf-8')
s=fp.readline().rstrip()


3) используем unicode()
fp=open('file.name')
s=unicode(fp.readline(),'utf-8').rstrip()


Абалдеть!

Не удивлюсь, если это еще не все варианты.
/Best regards,
Anton V. Deinow
Re[3]: [Python] строки в utf-8 из файла
От: Курилка Россия http://kirya.narod.ru/
Дата: 30.06.09 20:14
Оценка:
Здравствуйте, theTosh, Вы писали:

[cut]

T>Не удивлюсь, если это еще не все варианты.


PEP 20:

There should be one-- and preferably only one --obvious way to do it.


И про старуху бывает порнуха
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.