我想写以下代码:

import string
frm = b'acdefhnoprstuw'
to  = 'אקדיפהנופרסתאו'
trans_table = string.maketrans(frm, to)
hebrew_phrase = 'fear cuts deeper than swords'.translate(trans_table)

上面的代码不起作用,因为to的参数必须是字节序列,而不是字符串。问题是字节序列只能包含ASCII文字字符。因此,我无法进行转换,将英语字符串转换为希伯来语字符串。原因是string.maketrans(frm, to)重试了一个bytes对象。
对于我的任务,是否有一种优雅的方法可以使用string.maketrans()string.maketrans()函数(或使用Unicode的等效函数)?

最佳答案

您需要使用str.makeTrans(),它将两个str作为参数。

>>> frm = 'acdefhnoprstuw'
>>> to = 'אקדיפהנופרסתאו'
>>> trans_table = str.maketrans(frm, to)
>>> hebrew_phrase = 'fear cuts deeper than swords'.translate(trans_table)
>>> hebrew_phrase
'פיאר קאתס דייפיר תהאנ סוורדס'

string.maketrans仍然存在于python 3.1中,但这仅仅是因为他们错过了将其移动到3.0中的bytes.maketrans()。它在3.1中已经被弃用,在3.2中已经不存在了。

09-25 18:50