Ir a través de la string.traducir función que dice:

Eliminar todos los caracteres de s que están en deletechars (si está presente), y luego traducir los caracteres usando la tabla, que debe ser una cadena de 256 caracteres dar la traducción para cada valor de carácter, indexado por su ordinal. Si la tabla es Ninguno, sólo el carácter de la eliminación se lleva a cabo.

  • ¿Qué tabla significa aquí? Puede ser un dict que contiene el mapeo?
  • ¿Qué «debe ser una cadena de 256 caracteres» decir?
  • Puede el tabla ser de forma manual o a través de una función personalizada en lugar de string.maketrans?

He intentado utilizar la función (intentos de abajo) sólo para ver cómo funcionaba, pero no era con éxito capaz de usarlo.

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

Lo que me estoy perdiendo aquí?

3 Comentarios

  1. 22

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

    En Python 2.x. La tabla es de 256 caracteres de la cadena. Puede ser creado usando string.maketrans:

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

    En Python 3.x, la tabla de asignación de unicode ordinales a los caracteres unicode.

    >>> "abcabc".translate({ord('a'): 'd', ord('c'): 'x'})
    'dbxdbx'
    • Python 2 unicode.translate() se comporta exactamente igual que str.translate() en Python 3. Eso es porque usted tiene más de 256 valores posibles para traducir. Inversamente, bytes.translate() funciona exactamente igual que Python 2 str.translate(). Por lo que no depende de la versión de Python, depende del tipo de objeto; Unicode vs bytestring.
  2. 10

    table debe ser una cadena de 256 caracteres; el str.translate() método utiliza esta tabla para asignar el valor del byte (un número entre 0 y 255) a un nuevo personaje; por ejemplo, cualquier personaje 'a' (un byte con el valor entero 97) se sustituye por el 98º de caracteres en la tabla.

    Usted realmente desea para referirse a la str.translate() documentación por todo esto, no la string.translate() función; el segundo, la documentación no es tan completa.

    Usted puede construir uno usando string.maketrans función; le dan sólo los caracteres que desea reemplazar con los personajes que reemplazar estos; por su ejemplo, que:

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

    El segundo argumento también debe ser una cadena.

    Que parecen haber leído la documentación para el unicode.translate() método de comportamiento, cambiado y, de hecho, tiene que pasar en un diccionario unicode.translate(). Desde el Python 2 unicode tipo es el str tipo en Python 3, que también la manera en que tendría que utilizar str.translate() en Python 3 (donde bytes.translate() coincide con el anterior comportamiento).

  3. 0

    A traducir el texto, no el uso de un diccionario {ordinal: char}, pero un diccionario {char: char} (por ejemplo, {‘a’: ‘X’, ‘J’: ‘y’, …}:

    text.translate({ord(k):dictionary[k] for k in dictionary})

Dejar respuesta

Please enter your comment!
Please enter your name here