2009-02-17 20 views

Respuesta

33

Ver string.translate

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

Nota comentarios del Departamento de Comercio sobre sutilezas en la traducción de cadenas unicode

Editar: Desde tr es un poco más avanzado, también considere usar re.sub.

+3

Para python3, objeto ' 'módulo' no tiene atributo 'maketrans''. Use '" abc ".translate (str.maketrans (" abc "," def "))' ¡directamente! – SparkAndShine

17

Si está utilizando python3 traducir es menos detallado:

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

Ahh .. y también es equivalente a tr -d:

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

Para tr -d con python2.X usar un argumento adicional a la función de traducir:

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

¿hay un equivalente para 'tr -cd'? – Sundeep

-4

Un enfoque más sencillo puede ser para nosotros e reemplazar. p.ej.

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

No es necesario importar nada. Funciona en Python 2.x

+5

también funciona en Python 3 pero no hace lo que el OP está pidiendo. – iruvar

+1

la traducción 'cb' a 'wt' debe transformar' cabbage' en 'wattage' – Jasen

1

En Python 2, unicode.translate() acepta mapeos normales, es decir. no hay necesidad de importar nada tampoco:

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

El método translate() es especialmente útil para el bombeo de caracteres (como '+' y '-' más arriba), que no se puede hacer con replace(), y el uso de re.sub() ISN' muy sencillo para ese propósito tampoco.

Debo admitir, sin embargo, que el uso repetido de ord() no hace que el código parezca agradable y ordenado.

4

He desarrollado python-tr, implementado el algoritmo tr. Probémoslo.

Instalar:

$ pip install python-tr 

Ejemplo:

>>> 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

Esta funciona para Python 3

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

+0

¿Cómo es esto diferente de Piotr Czapla [respuesta] (http://stackoverflow.com/a/1385542/369450)? – cpburnz

Cuestiones relacionadas