je le code suivant:Comment est-ce que str.translate fonctionne avec les chaînes 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)
Ce qui fonctionne très bien pour les chaînes non-unicode:
>>> translate_non_alphanumerics('<foo>!')
'_foo__'
Mais échoue pour les chaînes 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
Je ne peux rien sens du paragraphe sur "Objets Unicode" dans le Python 2.6.2 docs pour la méthode str.translate().
Comment faire pour que cela fonctionne pour les chaînes Unicode?
Voici un exemple qui supprime la ponctuation Unicode d'une chaîne à l'aide de la méthode 'unicode.translate()' (http://stackoverflow.com/a/11066687/4279). – jfs
mieux utiliser 'chaîne d'importation; string.punctuation' au lieu de hardcoding 'not_letters_or_digits' en code réel. Je comprends que vous préférez être explicite. –