Я - новичок 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 "", line 1, in
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 для определенных букв.
Прекратите попытки изучить Python 3, прочитав документацию Python 2.
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.1), размещенный здесь только для справки:
"this is string example....wow!!!".translate(bytes.maketrans(b"aeiou",b"12345"))
Коротко и мило, нравится.
Если вы категорически настаиваете на работе с 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!!!'
>>>