2017-09-01 3 views
-2

En utilisant python, étant donné que chaîne = "Tiësto & Sevenn - BOOM (Artelax Remix)" qui contient des caractères non-ascii, comment puis-je utiliser unidecode pour réparer la chaîne ainsi dépouillé de non-ascii personnages?python unidecode - comment utiliser

string = random.choice(list(open('data.csv'))).rstrip() 
print "[+] Starting search for:", string 

artistname = string.rsplit(' - ', 1)[0] 
songname = string.rsplit(' - ', 1)[1] 

Le snip me donne ci-dessus: ARTISTNAME = Tiësto & Sevenn songname = BOOM (Artelax Remix)

Comme vous pouvez le voir, le ARTISTNAME contient encore des caractères non-ascii. Comment utiliser unidecode pour résoudre ce problème?

+2

Avez-vous lu les [exemples d'utilisation] (https://pypi.python.org/pypi/Unidecode)? Avez-vous essayé * de * tenter de comprendre comment utiliser unidecode? – user2357112

+0

Qu'avez-vous essayé jusqu'à présent? Voulez-vous les supprimer ou les remplacer? Dans votre exemple, voulez-vous '' "Tiesto & Sevenn" 'ou' "Tisto & Sevenn" 'ou autre chose? –

+0

Oui. J'ai essayé unidecode (u'string '). Je veux que le caractère ë soit changé en e, pas pour le supprimer tous ensemble. – god

Répondre

2

Appelez simplement unidecode sur votre chaîne (unquoted):

>>> from unidecode import unidecode 
>>> unidecode(string) 
'Tiesto & Sevenn - BOOM (Artelax Remix)' 

après normalisant dans une forme décomposée Il y a aussi la route plus/moins rapide de la suppression combinant caractères:

>>> import unicodedata 
>>> ''.join(s for s in unicodedata.normalize('NFD', string) if not unicodedata.combining(s)) 
'Tiesto & Sevenn - BOOM (Artelax Remix)' 
+1

unidecode (string) --- Ceci déclenche une exception ou un avertissement car certaines des chaînes de mon fichier data.csv sont bonnes à utiliser et n'ont pas besoin d'être converties en unidecode. /usr/lib64/python2.7/site-packages/unidecode/__init__.py:46: RuntimeWarning: L'argument n'est pas un objet Unicode. Passer une chaîne encodée aura probablement des résultats inattendus. Est-ce que cela aurait plus de sens d'assainir mon data.csv en convertissant tous les caractères non-ascii dans le fichier par rapport à quand je retire la chaîne? – god

+1

@god: Vous devez réellement lire les données * comme unicode * avant de les désinfecter. Utilisez ['codecs.open'] (https://docs.python.org/3/library/codecs.html#codecs.open) et spécifiez le codage correct. – user2357112