在Python 3中,'str'对象没有'decode'属性。

19
我在Python 3.3.4中遇到了一些关于decode方法的问题。这是我的代码:
for line in open('file','r'):
    decodedLine = line.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
5个回答

33

一个人将字符串进行编码,而另一个人则对字节进行解码。

你应该从文件中读取字节并进行解码:

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

6

open在Python 3中,如果您以文本模式打开,则已经解码为Unicode。如果您想将其作为字节打开,以便您可以随后进行解码,则需要使用模式'rb'打开。


4
在PyJWT 2.0.0版本之后,不再有「decode」方法,因此我们会遇到这个错误。为了避免这个问题,我们应该冻结下面的版本。
PyJWT==1.7.1

1

这是我在Python 3.6中流畅阅读中文文本的方法。首先,将字符串转换为字节,然后解码它们。

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

0
在Python 3中,使用这个思维模型:
  • 编码是将一个str对象转换为一个bytes对象的过程
  • 解码是将一个bytes对象转换为一个str对象的过程

Diagram

您遇到了错误 'str'对象没有属性'decode'。如果您需要一个 str,则无需对其运行 decode()。直接访问变量而不调用 decode()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接