web-dev-qa-db-fra.com

L'objet 'str' n'a pas d'attribut 'décode' en Python3

J'ai un problème avec la méthode de "décodage" dans python 3.3.4. Voici mon code:

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

Mais je ne peux pas décoder la ligne pour ce problème:

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

As tu des idées? Merci

8
hasmet

Un code chaînes et un décode octets.

Vous devez lire les octets du fichier et les décoder:

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

Heureusement, open a un argument de codage qui facilite les choses:

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

open décode déjà en Unicode en Python 3 si vous ouvrez en mode texte. Si vous voulez l'ouvrir en octets, afin de pouvoir ensuite décoder, vous devez ouvrir avec mode 'rb'.

3
Daniel Roseman

Cela fonctionne pour moi en douceur pour lire du texte chinois en Python 3.6. Tout d'abord, convertissez str en octets, puis décodez-les.

for l in open('chinese2.txt','rb'):
    decodedLine = l.decode('gb2312')
    print(decodedLine)
1
Sarah