Найти - Пользователи
Полная версия: проблема с кодировкой: текст из файла в список
Начало » Python для новичков » проблема с кодировкой: текст из файла в список
1 2 3
Budulianin
acme_ag
В консоли ошибка:
'ascii' codec can't decode byte 0xd1 in position 26…

Кодировку правильно указывай decode('utf-8')
acme_ag
ну как ее можно неправильно указать? все так и указал.
encode-decode – все это пробовал. щас еще немного и за бубном полезу.

что интересно – совсем недавно вот регулярными выражениями очищал код от мусора. та же схема – в input.txt исходник с мусором, в output.txt – чистый код. все было нормально, русский текст сохранен.
что сейчас произошло – я не понимаю.
Budulianin
acme_ag
ну как ее можно неправильно указать?

Я не знаю, как ты так указал, что у тебя ‘ascii’ codec can't decode byte

acme_ag
щас еще немного и за бубном полезу.
Достаточно понимать, что и как работает, чтобы делать правильно.
malya
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import codecs
with codecs.open('input.txt', 'r', 'utf-8') as textfile:
    a = [line.strip() for line in textfile]
with codecs.open('output.txt', 'w', 'utf-8') as textfile:
    for line in a:
        textfile.write(line)
acme_ag
malya
это выдает UnicodeDecodeError: ‘utf8’ codec cant' decode byte 0xf2…
Я так понимаю, у вас все работает как надо. Дело в настройках IDE?


“Решил” проблему так:
#-*-coding:utf8-*-
import codecs
with codecs.open("input.txt") as textfile:
    a = [line.strip() for line in textfile]
file = open('output.txt', 'w')
file.write(str(a))
file.close()
f = codecs.open('output.txt','r', 'string-escape')
k = f.read()
file = open('output1.txt', 'w')
file.write(str(k))
file.close()

В консоли и output.txt:
['\xf2\xe5\xf0\xec\xee\xea\xeb\xe5\xe9 ...']
В консоли и output1.txt все отображается как надо:
['термоклей... ']
Budulianin
acme_ag
codecs.open(“input.txt”)
То же самое, что open, потому что ты кодировку не указал.

Можешь не городить столько, а сразу писать
fout.write(str(a).decode('string-escape'))

acme_ag
Дело в настройках IDE?
Нет, просто ты пишешь в файл такой текст:
>>> str(a)
"['\\xd0\\xbe\\xd0\\xbb\\xd0\\xbe\\xd0\\xbb\\xd0\\xbe\\xd0\\xbe', '\\xd0\\xbe\\xd0\\xbb\\xd0\\xbe\\xd0\\xbb\\xd0\\xbe', '']"

Интепретатор не понимает, что это байты и не пытается с ними ничего сделать.
И пишет это, как ascii

А так понимает:
>>> str(a).decode('string-escape')
"['\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xbe', '\xd0\xbe\xd0\xbb\xd0\xbe\xd0\xbb\xd0\xbe', '']"
acme_ag
Budulianin
То же самое, что open
да, осталось от предыдущего. не углядел.

Budulianin
Можешь не городить столько, а сразу писать

спасибо! не догадался.
Budulianin
acme_ag

Можешь взять Python3, там нет проблем со string-escape, там везде Unicode.
Но если не будешь понимать, как Python работает с кодировками, то будет много магии.

Лутца тебе нужно почитать.
И Юру послушать.
acme_ag
Я Лутца как раз сейчас читаю (Изучаем Python, 4).
Python 2 сознательно выбирал, т.к. много где писалось, что 3 пока еще молодой, не оброс библиотеками, с 2. на котором написано гораздо больше, плохо совместим. Возможно, не стоило.
За видео – спасибо. Посмотрю.
Budulianin
acme_ag
что 3 пока еще молодой
Брехню читал. Python2 ужё мёртвый.
Про Python3 эта инфа уже неактуальна.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB