Каким образом string.maketrans не работает в Python 3.1?

Я - новичок 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, если это возможно?

18
задан agf 29 September 2011 в 11:38
поделиться

4 ответа

Строки имеют размер , а не байтов.

Это простое определение в Python 3.

Строки - это Unicode (не байты). Строки Unicode используют «...» или '...'

Байты - это байты (которые не являются строками). В байтовых строках используется b "..." или b '...' .

Используйте b «aeiou» , чтобы создать последовательность байтов, состоящую из кодов ASCII для определенных букв.

11
ответ дан 30 November 2019 в 05:47
поделиться

Прекратите попытки изучить 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)}))
16
ответ дан 30 November 2019 в 05:47
поделиться

Вот мой последний код Python (3.1), размещенный здесь только для справки:

"this is string example....wow!!!".translate(bytes.maketrans(b"aeiou",b"12345"))

Коротко и мило, нравится.

-1
ответ дан 30 November 2019 в 05:47
поделиться

Если вы категорически настаиваете на работе с 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!!!'
>>>
1
ответ дан 30 November 2019 в 05:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: