2012-04-26 6 views
8

erstellen Ich mag würde den folgenden Code schreiben:Python 3.x: Mit string.maketrans(), um einem Unicode-Zeichen Transformation

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

Der obige Code funktioniert nicht, da die to Parameter zu string.maketrans(frm, to) muss eine Byte-Sequenz sein, keine Zeichenfolge. Das Problem besteht darin, dass Bytefolgen nur ASCII-Literalzeichen enthalten können. Daher kann ich keine Umwandlung vornehmen, die englische Zeichenfolgen in hebräische Zeichenfolgen übersetzt. Der Grund ist, dass string.maketrans() ein Byte-Objekt retruns.

Gibt es eine elegante Möglichkeit, die Funktionen string.maketrans() und (oder gleichwertige Funktionen, die mit Unicode funktionieren) für meine Aufgabe zu verwenden?

Antwort

13

Sie müssen str.maketrans() verwenden, das zwei Str als Argumente benötigt.

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

String.maketrans existierte noch in Python 3.1, aber das ist nur, weil sie es zu bytes.maketrans verpassten bewegen() in 3,0. Es war schon in 3.1 veraltet und in 3.2 ist es weg.

+0

Ist 'import string' jemals eine gute Idee? – snakile

+0

@snakile: Nicht sehr oft, aber es gibt gültige Verwendungen dafür: http://docs.python.org/py3k/library/string –