2012-04-26 60 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

相關問題