2009-02-17 3 views

Répondre

33

Voir string.translate

import string 
"abc".translate(string.maketrans("abc", "def")) # => "def" 

note des commentaires de la doc sur les subtilités dans la traduction des chaînes Unicode.

Modifier: Depuis tr est un peu plus avancé, pensez également à utiliser re.sub.

+3

Pour python3, l'objet 'module' n'a pas d'attribut 'maketrans'. Utilisez '" abc ".translate (str.maketrans (" abc "," def "))' directement! – SparkAndShine

17

Si vous utilisez python3 traduire est moins bavard:

>>> 'abc'.translate(str.maketrans('ac','xy')) 
'xby' 

Ahh .. et il y a aussi équivalent à tr -d:

>>> "abc".translate(str.maketrans('','','b')) 
'ac' 

Pour tr -d avec python2.X utiliser un argument supplémentaire pour traduire la fonction:

>>> "abc".translate(None, 'b') 
'ac' 
+0

y at-il un équivalent pour 'tr -cd'? – Sundeep

-4

Une approche plus simple peut être pour nous e remplacez. par exemple.

"abc".replace("abc", "def") 
'def' 

Pas besoin d'importer quoi que ce soit. Fonctionne en Python 2.x

+5

cela fonctionne également en Python 3 mais ne fait pas ce que demande l'OP. – iruvar

+1

la traduction 'cb' en' wt' devrait transformer 'chou' en' wattage' – Jasen

1

En Python 2, unicode.translate() accepte les mappages ordinaires, c.-à-d. il n'y a pas besoin d'importer quoi que ce soit soit:

>>> u'abc+-'.translate({ord('+'): u'-', ord('-'): u'+', ord('b'): None}) 
u'ac-+' 

La méthode translate() est particulièrement utile pour les caractères échange (comme « + » et « - » ci-dessus), qui ne peut être fait avec replace(), et en utilisant re.sub() n » très simple à cette fin non plus.

Je dois admettre, cependant, que l'utilisation répétée de ord() ne rend pas le code joli et bien rangé.

4

J'ai développé python-tr, implémenté l'algorithme tr. Essayons.

Installer:

$ pip install python-tr 

Exemple:

>>> from tr import tr 
>>> tr('bn', 'cr', 'bunny') 
'curry' 
>>> tr('n', '', 'bunny', 'd') 
'buy' 
>>> tr('n', 'u', 'bunny', 'c') 
'uunnu' 
>>> tr('n', '', 'bunny', 's') 
'buny' 
>>> tr('bn', '', 'bunny', 'cd') 
'bnn' 
>>> tr('bn', 'cr', 'bunny', 'cs') 
'brnnr' 
>>> tr('bn', 'cr', 'bunny', 'ds') 
'uy' 
-1

Celui-ci fonctionne pour Python 3

-int('(1200)'.translate(str.maketrans('','','()')))

+0

Comment cela est-il différent de [réponse] de Piotr Czapla (http://stackoverflow.com/a/1385542/369450)? – cpburnz

Questions connexes