我是一个Python新手。
为什么this在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的工作代码吗?
字符串不是字节。
这是Python 3中的一个简单定义。
字符串是Unicode(不是字节)Unicode字符串使用"..."
或'...'
字节是字节(不是字符串)字节字符串使用b"..."
或b'...'
。
使用b"aeiou"
创建由某些字母的ASCII代码组成的字节序列。
当bytes.maketrans()
更简单并且不需要'b'前缀时,您不需要使用str
:
print("Swap vowels for numbers.".translate(str.maketrans('aeiou', '12345')))
通过阅读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)}))
在Python 3中,不推荐使用string.maketrans()
函数,并将其替换为新的静态方法bytes.maketrans()
和bytearray.maketrans()
。
此更改解决了字符串模块支持哪些类型的混淆。
现在str
,bytes
和bytearray
都有自己的maketrans
和translate
方法,并配有适当类型的中间翻译表。
"this is string example....wow!!!".translate(str.maketrans("aeiou","12345"))
这样做,并没有额外的字节转换。我不知道为什么要使用byte而不是str。
如果你绝对坚持使用8位字节:
>>> intab = b"aeiou"
>>> outtab = b"12345"
>>> trantab = bytes.maketrans(intab, outtab)
>>> strg = b"this is string example....wow!!!";
>>> print(strg.translate(trantab));
b'th3s 3s str3ng 2x1mpl2....w4w!!!'
>>>
嘿,这是一个简单的衬垫,对我来说非常适合
import string
a = "Learning Tranlate() Methods"
print (a.translate(bytes.maketrans(b"aeiou", b"12345")))*
OUTPUT ::::
L21rn3ng Tr1nl1t2() M2th4ds
以下是在Python 2或3中执行转换和删除的示例:
import sys
DELETE_CHARS = '!@#$%^*()+=?\'\"{}[]<>!`:;|\\/-,.'
if sys.version_info < (3,):
import string
def fix_string(s, old=None, new=None):
if old:
table = string.maketrans(old, new)
else:
table = None
return s.translate(table, DELETE_CHARS)
else:
def fix_string(s, old='', new=''):
table = s.maketrans(old, new, DELETE_CHARS)
return s.translate(table)
这是我最后发布的Python(3.1)代码,仅供参考:
"this is string example....wow!!!".translate(bytes.maketrans(b"aeiou",b"12345"))
简短而甜蜜,喜欢它。