web-dev-qa-db-ja.com

Python3の 'str'オブジェクトには属性 'decode'がありません

python 3.3.4の "decode"メソッドに問題があります。これは私のコードです:

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

しかし、私はこの問題の行をデコードできません:

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

あなたはなにか考えはありますか?ありがとう

8
hasmet

1つのencodes文字列、および1つのdecodesバイト。

ファイルからバイトを読み取ってデコードする必要があります。

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')
24
Veedrac

openは、すでにPython 3でUnicodeにデコードします。テキストモードで開いた場合は3です。バイトとして開き、デコードできるようにするには、次のコマンドで開く必要があります。モード「rb」。

3
Daniel Roseman

これは、Python 3.6で中国語のテキストをスムーズに読み取るために機能します。最初に、strをバイトに変換してから、デコードします。

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