Как же так вышло?maketrans не работает в Python 3.1?
Я новичок в Питоне.
Почему это не работает в 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, Если это возможно?
8 ответов:
Строки - это, а не байты.
Это простое определение в Python 3.
Строки являются Юникодом (которые не являются байтами) строки Юникода используют
"..."или'...'Байты - это байты (которые не являются строками) байтовые строки используют
b"..."илиb'...'.Используйте
b"aeiou"для создания последовательности байтов, состоящей из кодов ASCII для определенных букв.
Вам не нужно использовать
bytes.maketrans(), Когдаstrбудет проще и устранит необходимость в префиксе 'b':print("Swap vowels for numbers.".translate(str.maketrans('aeiou', '12345')))
Прекратите попытки изучить 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 функция
Это изменение устраняет путаницу вокруг того, какие типы поддерживались модулем string.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!!!' >>>
Эй, вот простой лайнер, который отлично работал для меня
Вывод :::: L21rn3ng Tr1nl1t2() M2th4dsimport string a = "Learning Tranlate() Methods" print (a.translate(bytes.maketrans(b"aeiou", b"12345")))*
Вот мой окончательный код Python (3.1), опубликованный здесь только для справки:
"this is string example....wow!!!".translate(bytes.maketrans(b"aeiou",b"12345"))Короткий и сладкий, люблю его.
Comments