16

I've some problem with "decode" method in python 3.3.4. This is my code:

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

But I can't decode the line for this problem:

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

Do you have any ideas? Thanks

sophros
  • 11,665
  • 7
  • 38
  • 61
hasmet
  • 728
  • 3
  • 12
  • 32
  • 2
    Yes, strings in Python 3.x no longer have the `decode` method - have a look at https://docs.python.org/3/howto/unicode.html – jonrsharpe Sep 30 '14 at 16:00

4 Answers4

28

One encodes strings, and one decodes bytes.

You should read bytes from the file and decode them:

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

Luckily open has an encoding argument which makes this easy:

for decodedLine in open('file', 'r', encoding='ISO-8859-1'):
    line = decodedLine.split('\t')
Veedrac
  • 54,508
  • 14
  • 106
  • 164
6

open already decodes to Unicode in Python 3 if you open in text mode. If you want to open it as bytes, so that you can then decode, you need to open with mode 'rb'.

Daniel Roseman
  • 567,968
  • 59
  • 825
  • 842
2

After PyJWT 2.0.0 version not having a decode method, so we are getting this error. We should freeze the below version to avoid this issue.

PyJWT==1.7.1
Sathiamoorthy
  • 6,942
  • 6
  • 53
  • 64
1

This works for me smoothly to read Chinese text in Python 3.6. First, convert str to bytes, and then decode them.

for l in open('chinese2.txt','rb'):
    decodedLine = l.decode('gb2312')
    print(decodedLine)
William Price
  • 3,841
  • 1
  • 34
  • 50
Sarah
  • 1,518
  • 13
  • 15