8

次のコードを書きたいと思います。

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 リテラル文字しか含めることができないことです。したがって、英語の文字列をヘブライ語の文字列に変換する変換を行うことはできません。その理由はstring.maketrans()、バイト オブジェクトを再実行するためです。

string.maketrans()私のタスクにandtranslate()関数 (またはユニコードで動作する同等の関数)を使用するエレガントな方法はありますか?

4

1 に答える 1

13

引数として 2 つの str を取る str.maketrans() を使用する必要があります。

>>> 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 では廃止されました。

于 2012-04-26T10:02:39.860 に答える