2012-04-26 81 views
8

我还想写下面的代码:的Python 3.X:使用string.maketrans(),以创建Unicode字符转换

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

上面的代码不起作用,因为to参数到string.maketrans(frm, to)必须是一个字节序列,而不是一个字符串。问题是字节序列只能包含ASCII文字字符。因此我无法进行将英文字符串翻译为希伯来字符串的转换。原因是​​重新创建了一个字节对象。

是否有使用​​和translate()功能(或等效的功能与Unicode的工作)对我的任务优雅的方式?

回答

13

您需要使用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中已经不存在了。

+0

'import string'永远是个好主意吗? – snakile 2012-04-26 15:09:47

+0

@snakile:并不是很常见,但它的有效用途是:http://docs.python.org/py3k/library/string – 2012-04-26 16:16:55