353 Stimmen

So entfernen Sie \xa0 von String in Python?

Ich verwende derzeit Beautiful Soup zum Parsen einer HTML-Datei und rufe get_text() aber ich habe das Gefühl, dass ich mit einer Menge von \xa0 Unicode für Leerzeichen. Gibt es einen effizienten Weg, um alle von ihnen in Python 2.7 zu entfernen, und ändern Sie sie in Leerzeichen? Ich denke, die allgemeinere Frage wäre, gibt es eine Möglichkeit, Unicode-Formatierung zu entfernen?

Ich habe es versucht: line = line.replace(u'\xa0',' ') wie in einem anderen Thread vorgeschlagen, aber das änderte die \xa0 's zu u's, also habe ich jetzt überall "u "s stattdessen. ):

EDIT: Das Problem scheint behoben zu sein durch str.replace(u'\xa0', ' ').encode('utf-8') sondern einfach tun .encode('utf-8') ohne replace() scheint dazu zu führen, dass es noch seltsamere Zeichen ausspuckt, \xc2 zum Beispiel. Kann jemand das erklären?

409voto

samwize Punkte 23381

\xa0 ist in Latin1 (ISO 8859-1) ein Leerzeichen ohne Umbruch, also chr(160). Sie sollten es durch ein Leerzeichen ersetzen.

string = string.replace(u'\xa0', u' ')

Wenn .encode('utf-8'), wird der Unicode in utf-8 kodiert, d.h. jeder Unicode kann durch 1 bis 4 Bytes dargestellt werden. Für diesen Fall, \xa0 wird durch 2 Bytes dargestellt \xc2\xa0.

Lesen Sie mehr über http://docs.python.org/howto/unicode.html .

Bitte beachten Sie: Diese Antwort stammt aus dem Jahr 2012, Python hat sich weiterentwickelt, Sie sollten in der Lage sein, mit unicodedata.normalize jetzt

320voto

Jamie Punkte 3228

Es gibt viele nützliche Dinge in Pythons unicodedata Bibliothek. Eine davon ist die .normalize() Funktion.

Versuchen Sie es:

new_str = unicodedata.normalize("NFKD", unicode_str)

Ersetzen Sie NFKD durch eine der anderen im obigen Link aufgeführten Methoden, wenn Sie nicht die gewünschten Ergebnisse erzielen.

39voto

Ali Raza Bhayani Punkte 2685

Nachdem ich mehrere Methoden ausprobiert habe, habe ich es folgendermaßen gemacht. Im Folgenden werden zwei Möglichkeiten zur Vermeidung/Entfernung von \xa0 Zeichen aus der geparsten HTML-Zeichenkette.

Nehmen wir an, wir haben unser rohes html wie folgt:

raw_html = '<p>Dear Parent, </p><p><span style="font-size: 1rem;">This is a test message, </span><span style="font-size: 1rem;">kindly ignore it. </span></p><p><span style="font-size: 1rem;">Thanks</span></p>'

Versuchen wir also, diese HTML-Zeichenkette zu bereinigen:

from bs4 import BeautifulSoup
raw_html = '<p>Dear Parent, </p><p><span style="font-size: 1rem;">This is a test message, </span><span style="font-size: 1rem;">kindly ignore it. </span></p><p><span style="font-size: 1rem;">Thanks</span></p>'
text_string = BeautifulSoup(raw_html, "lxml").text
print text_string
#u'Dear Parent,\xa0This is a test message,\xa0kindly ignore it.\xa0Thanks'

Der obige Code erzeugt diese Zeichen \xa0 in der Zeichenkette. Um sie richtig zu entfernen, gibt es zwei Möglichkeiten.

Methode # 1 (empfohlen): Die erste ist die von BeautifulSoup get_text Methode mit Strip-Argument als True Unser Code wird also:

clean_text = BeautifulSoup(raw_html, "lxml").get_text(strip=True)
print clean_text
# Dear Parent,This is a test message,kindly ignore it.Thanks

Methode # 2: Die andere Möglichkeit ist die Verwendung der Python-Bibliothek unicodedata

import unicodedata
text_string = BeautifulSoup(raw_html, "lxml").text
clean_text = unicodedata.normalize("NFKD",text_string)
print clean_text
# u'Dear Parent,This is a test message,kindly ignore it.Thanks'

Ich habe auch diese Methoden ausführlich beschrieben in diesem Blog auf die Sie sich vielleicht beziehen möchten.

30voto

user3590113 Punkte 507

Versuchen Sie, .strip() am Ende Ihrer Zeile zu verwenden line.strip() hat für mich gut funktioniert

20voto

user278064 Punkte 9738

Versuchen Sie dies:

string.replace('\\xa0', ' ')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X