python string python-2.7

python - ¿Qué significa "tabla" en la función string.translate?



python-2.7 (2)

Pasando por la función string.translate que dice:

Elimine todos los caracteres de s que están en deletechars (si está presente), y luego traduzca los caracteres usando table, que debe ser una cadena de 256 caracteres que proporcione la traducción para cada valor de carácter, indexado por su ordinal. Si la tabla es Ninguna, solo se realiza el paso de eliminación de caracteres.

  • ¿Qué significa tabla aquí? ¿Puede ser un dict contenga el mapeo?
  • ¿Qué significa "debe ser una cadena de 256 caracteres" ?
  • ¿Se puede hacer la tabla manualmente o mediante una función personalizada en lugar de string.maketrans ?

Intenté usar la función (intenta más abajo) solo para ver cómo funcionaba pero no pude usarla con éxito.

>>> "abcabc".translate("abcabc",{ord("a"): "d", ord("c"): "x"}) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: translation table must be 256 characters long

>>> "abcabc".translate({ord("a"): ord("d"), ord("c"): ord("x")}, "b") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: expected a character buffer object

>>> "abc".translate({"a": "d", "c": "x"}, ["b"]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: expected a character buffer object

¿Que me estoy perdiendo aqui?


Depende de la versión de Python que esté utilizando.

En Python 2.x. La tabla es cadena de 256 caracteres. Se puede crear usando string.maketrans :

>>> import string >>> tbl = string.maketrans(''ac'', ''dx'') >>> "abcabc".translate(tbl) ''dbxdbx''

En Python 3.x, la tabla es la asignación de ordinales Unicode a caracteres Unicode.

>>> "abcabc".translate({ord(''a''): ''d'', ord(''c''): ''x''}) ''dbxdbx''


table debe ser una cadena de 256 caracteres; el método str.translate() usa esta tabla para mapear el valor de byte (un número entre 0 y 255) a un nuevo carácter; por ejemplo, cualquier carácter ''a'' (un byte con el valor entero 97) se reemplaza con el 98 ° carácter en la tabla.

Realmente desea str.translate() documentación str.translate() para todo esto, no la función string.translate() ; la última documentación no es tan completa.

Puedes construir uno usando la función string.maketrans ; le das solo los personajes que quieres reemplazar con los personajes que los reemplazan; para su ejemplo, eso es:

>>> import string >>> table = string.maketrans(''ac'', ''cx'') >>> len(table) 256 >>> table[97] ''c'' >>> ''abcabc''.translate(table, ''b'') ''cxcx''

El segundo argumento también se supone que es una cadena.

Parece que ha leído la documentación del método unicode.translate() ; el comportamiento ha cambiado y, de hecho, debe pasar un diccionario para unicode.translate() . Dado que el tipo unicode Python 2 es el tipo str en Python 3, así es como str.translate() en Python 3 (donde bytes.translate() coincide con el comportamiento anterior).