2014-09-30 1 views
3

У меня есть проблема с методом «decode» в python 3.3.4. Это мой код:Объект 'str' не имеет атрибута 'decode' в Python3

for lines in open('file','r'): 
    decodedLine = lines.decode('ISO-8859-1') 
    line = decodedLine.split('\t') 

Но я не могу расшифровать строку для этой задачи:

AttributeError: 'str' object has no attribute 'decode' 

У вас есть какие-нибудь идеи? Спасибо

+2

Да, строки в Python 3.x больше не имеют ' decode' - посмотрите https://docs.python.org/3/howto/unicode.html – jonrsharpe

ответ

13

Один кодирует строки и один декодирует байтов.

Вы должны прочитать байты из файла и расшифровать их:

for lines in open('file','rb'): 
    decodedLine = lines.decode('ISO-8859-1') 
    line = decodedLine.split('\t') 

К счастью open имеет кодировку аргумент, который делает это легко:

for decodedLine in open('file', 'r', encoding='ISO-8859-1'): 
    line = decodedLine.split('\t') 
1

open уже декодирует в Unicode в Python 3, если вам открыть в текстовом режиме. Если вы хотите открыть его в виде байтов, чтобы затем вы могли декодировать, вам нужно открыть его с помощью режима 'rb'.

0

Это работает для меня гладко, чтобы читать китайский текст в Python 3.6: преобразовать str в байты, а затем декодировать их.
для л в открытом ('chinese2.txt', 'гь'): decodedLine = l.decode ('gb2312') печать (decodedLine)

Смежные вопросы