为什么在Python 3.1中string.maketrans无效?
我刚开始学Python。
为什么这个在Python 3.1里不管用呢?
from string import maketrans # Required to call maketrans function.
intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab)
str = "this is string example....wow!!!";
print str.translate(trantab);
当我运行上面的代码时,得到的结果是:
Traceback (most recent call last):
File "<pyshell#119>", line 1, in <module>
transtab = maketrans(intab, outtab)
File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/string.py", line 60, in maketrans
raise TypeError("maketrans arguments must be bytes objects")
TypeError: maketrans arguments must be bytes objects
“必须是字节对象”这句话是什么意思?如果可能的话,有人能帮我发一段在Python 3.1里能用的代码吗?
9 个回答
16
别再通过阅读Python 2的文档来学习Python 3了。
intab = 'aeiou'
outtab = '12345'
s = 'this is string example....wow!!!'
print(s.translate({ord(x): y for (x, y) in zip(intab, outtab)}))
36
你不需要使用 bytes.maketrans()
,因为用 str
会更简单,而且不需要加上'b'前缀:
print("Swap vowels for numbers.".translate(str.maketrans('aeiou', '12345')))
11
字符串不是字节。
这是Python 3中的一个简单定义。
字符串是Unicode(这不是字节),Unicode字符串用"..."
或'...'
表示。
字节就是字节(这不是字符串),字节字符串用b"..."
或b'...'
表示。
使用b"aeiou"
可以创建一个由某些字母的ASCII码组成的字节序列。