tengo el siguiente código:¿Cómo hago que str.translate funcione con cadenas Unicode?
import string
def translate_non_alphanumerics(to_translate, translate_to='_'):
not_letters_or_digits = u'!"#%\'()*+,-./:;<=>[email protected][\]^_`{|}~'
translate_table = string.maketrans(not_letters_or_digits,
translate_to
*len(not_letters_or_digits))
return to_translate.translate(translate_table)
Qué funciona muy bien para las cadenas no Unicode:
>>> translate_non_alphanumerics('<foo>!')
'_foo__'
Pero falla por cadenas Unicode:
>>> translate_non_alphanumerics(u'<foo>!')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in translate_non_alphanumerics
TypeError: character mapping must return integer, None or unicode
no puedo hacer ninguna sentido del párrafo sobre "objetos Unicode" en el Python 2.6.2 docs para el método str.translate().
¿Cómo puedo hacer este trabajo para cadenas Unicode?
aquí hay un [ejemplo que elimina la puntuación Unicode de una cadena usando el método 'unicode.translate()'] (http://stackoverflow.com/a/11066687/4279). – jfs
mejor uso 'cadena de importación; string.punctuation' en lugar de hardcoding 'not_letters_or_digits' en código real. Lo entiendo aquí, prefieres ser explícito. –