2017-09-01 3 views
-2

Mit Python, vorausgesetzt, dass string = "Tiësto & Sevenn - BOOM (Artelax Remix)", die nicht-ASCII-Zeichen enthält, wie verwende ich Unidecode, um die Zeichenfolge so bereinigt sauber von Nicht-ASCII zu beheben Figuren?Python Unidecode - wie zu verwenden

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

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

Die Schnipsel oben gibt mir: Künstlernamen = Tiësto & sevenn songname = BOOM (Artelax Remix)

Wie Sie sehen können, der Künstlername noch Nicht-ASCII-Zeichen enthält. Wie verwende ich Unidecode, um dieses Problem zu beheben?

+2

Haben Sie gelesen die [Anwendungsbeispiele] (https://pypi.python.org/pypi/Unidecode)? Hast du * irgendeinen * Versuch unternommen, herauszufinden, wie man Unidecode benutzt? – user2357112

+0

Was hast du bisher versucht? Möchten Sie sie entfernen oder ersetzen? In Ihrem Beispiel wollen Sie "Tiesto & Sevenn" oder "Tisto & Sevenn" oder etwas anderes? –

+0

Ja. Ich habe unidecode (u'string) versucht. Ich möchte, dass das Zeichen zu e geändert wird, nicht um alles zusammen zu entfernen. – god

Antwort

2

Rufen Sie einfach unidecode auf string (unquoted):

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

Es gibt auch die länger/langsamer Weg kombinierende Zeichen zu entfernen, nachdem sie in einer zerlegt Form der Normalisierung:

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

unidecode (string) --- Dies löst eine Ausnahme oder Warnung aus, da einige der Strings in meiner Datei data.csv gut funktionieren und nicht durch Unidecode konvertiert werden müssen. /usr/lib64/python2.7/site-packages/unidecode/__init__.py:46: RuntimeWarning: Argument ist kein Unicode-Objekt. Das Übergeben einer codierten Zeichenfolge wird wahrscheinlich zu unerwarteten Ergebnissen führen. Wäre es sinnvoller, meine data.csv-Datei zu konvertieren, die alle nicht-ASCII-Zeichen in der Datei konvertiert, als wenn ich die Zeichenfolge lösche? – god

+1

@god: Sie müssen die Daten tatsächlich * als Unicode * lesen, bevor Sie sie bereinigen. Verwenden Sie ['codecs.open'] (https://docs.python.org/3/library/codecs.html#codecs.open) und geben Sie die korrekte Codierung an. – user2357112