J'ai le code suivant :
import string
def translate_non_alphanumerics(to_translate, translate_to='_'):
not_letters_or_digits = u'!"#%\'()*+,-./:;<=>?@[\]^_`{|}~'
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 de caractères 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 n'arrive pas à comprendre le paragraphe sur les "objets Unicode" dans le document Documentation sur Python 2.6.2 pour la méthode str.translate().
Comment faire pour que cela fonctionne pour les chaînes Unicode ?
0 votes
Voici un exemple qui supprime la ponctuation Unicode d'une chaîne de caractères en utilisant
unicode.translate()
méthode .0 votes
Meilleure utilisation
import string; string.punctuation
au lieu de coder en durnot_letters_or_digits
en code réel. Je comprends qu'ici vous préférez être explicite.