Gewusst wie: entfernen extended ascii mit python?
In versuchen zu beheben bis eine PML (Palm Markup Language) Datei, es scheint, als ob meine test-Datei nicht-ASCII-Zeichen, die verursacht MakeBook zu beschweren. Die Lösung wäre entfernen Sie alle nicht-ASCII-chars in der PML.
So, in dem Versuch, dies zu beheben, in python habe ich
import unicodedata, fileinput
for line in fileinput.input():
print unicodedata.normalize('NFKD', line).encode('ascii','ignore')
Allerdings führt dies zu einer Fehlermeldung, die Zeile muss "unicode, nicht str". Hier ein Datei-fragment.
\B1a\B \tintense, disordered and often destructive rage†.†.†.\t
Nicht ganz sicher, wie Sie Sie richtig zu pass-line-in verarbeitet werden, an dieser Stelle.
- Wollen Sie heraus zu filtern und alle Zeichen, deren ASCII-Wert größer als 255?
- Streng genommen gibt es keine solche Sache wie Erweiterte ASCII. ASCII definiert Werte von 0 bis 127. Alles, was höher als die können nur interpretiert werden, willkürlich. Vielleicht sollte man den Begriff nicht-ASCII-Zeichen.
- Verwandte: Safe escape-Funktion für terminal-Ausgabe stackoverflow.com/questions/437476/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen
print line.decode('iso-8859-1').encode('ascii', 'ignore')
-- das sollte viel näher an, was Sie wollen.clean=''.join(c for c in line if ord(c)>=32)
(entfernt ALLE control-codes, einschließlich newline und carriage return -- anpassen, um zu schmecken, können wir nicht wirklich tun es für Sie, ohne zu wissen, WAS control-codes, die Sie entfernen möchten,! -).spurious=set(chr(c) for c in range(32))-set('\r\n\t')
und natürlichclean-''.join(c for c in line if c not in spurious
, dann interaktiv anpassenspurious
durch empirisch versuchen, bis es genau die Zeichen, die Sie entfernen müssen.Würden Sie gerne behandeln
line
als ASCII-codierte Daten, so dass die Antwort ist, Sie zu entschlüsseln, um text mit Hilfe der ascii-codec:line.decode('ascii')
Wird dieser Fehler für die Daten, die in der Tat nicht ASCII-kodiert. Dies ist, wie Sie ignorieren diesen Fehler:
line.decode('ascii', 'ignore')
.Dies gibt Ihnen text, in form einer
unicode
Instanz. Wenn Sie lieber die Arbeit mit (ascii-codiert) - Daten anstelle von text, können Sie re-codieren, um wieder einestr
oderbytes
Instanz (abhängig von Ihrer version von Python):line.decode('ascii', 'ignore').encode('ascii')
Fallen nicht-ASCII-Zeichen verwenden
line.decode(your_file_encoding).encode('ascii', 'ignore')
. Aber wahrscheinlich würden Sie besser verwenden PLM-escape-Sequenzen für Sie:Diese Ausgänge
\B1a\B \tintense, disordered and often destructive rage\U2020.\U2020.\U2020.\t
.Fallen, die nicht-ASCII-control-Zeichen, die mit regulären Ausdrücken ist auch ganz einfach (das kann sicher verwendet werden, die nach der Flucht):
Beim Lesen aus einer Datei in Python, Sie sind immer byte-strings, aka "str" in Python 2.x und früher. Sie konvertieren müssen diese auf den "unicode" Typ mit der
decode
Methode. eg:Ersetzen 'latin1' mit der richtigen Codierung.