In Python &#... in \... umwandeln
lima-city → Forum → Programmiersprachen → Python
ausprobieren
code
definieren
einlesen
ersetzen
folgendes problem
gefunden code
import
importieren
inhalt
machen
methode
modul
muster
problem
rufen
string
tat
vorteil
zeichen
-
Hallo!
Ich habe folgendes Problem:
Ich möchte mit Python und urllib eine Website einlesen.
In dieser kommen Unicode-Zeichen in der Form i vor.
Um diese jetzt richtig auszugeben muss die ja irgendwie entsprechend übersetzen.
Ich dachte - ist ja kein problem: ersetzen wir einfach die &# dur ein \
Leider gibt mir das einen Error aus, (SyntaxError: EOL while scanning literal), obwohl ich das eigentlich als r'\', also als RAW-String
versuchte...
Wie komm ich zum Ziel?
lg,
...
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wenn du &# durch ein \ umwandeln willst, musst du ein Doppeltes Backslash \\ verwenden.
-
Ich bin mir nicht ganz sicher, ob dieses Problem tatsächlich noch aktuell ist, aber falls ja:
Es ist tatsächlich nicht so einfach. Man kann nicht einfach 2 Backslashes nehmen, denn aus i wird dann \\105. Wenn man einen nimmt erhält man einen Error, und wenn man z.B. versucht &# mit \u zu ersetzen, macht Python automatisch \\u daraus. Python denkt mit, auch wenn das in diesem Fall nicht zum Vorteil dient. Hab mich gerade aber hin gesetzt und eine recht schnelle und einfache Lösung gefunden:
import re def rplc(matchobj): return unichr(int(matchobj.group(1))) a="iblabla|bliblablubĖ" re.sub(r"&#(\d+)",rplc,a) # Ergibt: u'iblabla|bliblablub\u0116'
Kurze Erklärung: Wir importieren das re-Modul, und definieren die Methode rplc welche aus einem übegebenen Matchobject den Inhalt herausnimmt, und in einen Unicodecharakter umwandelt und zurückgibt. Danach definieren wir einen zufälligen String a, welcher eben &#-Zeichen enthält. Dann rufen wir re.sub auf, welche uns alle Zeichen die zu dem übegebenen Muster(r"&#(\d+)") passen, als Matchobject an rplc übergibt und mit dem Rückgabewert von rplc ersetzt.
lg
€dit: Huch, geht sogar noch einfacher, indem man anstatt matchobj.group(0) matchobj.group(1) nimmt
Beitrag zuletzt geändert: 22.11.2009 21:14:47 von ketchupfleck -
Hallo ihr 2,
Es ist in der Tat nicht mehr aktuell - entschuldigt das ich das nicht bereits mitteilte.
Ich habe es irgendwie so gelöst (bin grad nicht zuhause, um es genau nachzusehen):
blub = '6...' blub.replace('&#', '') blub_list = [] for muh in s.split(';'): blub_list.append(chr(muh)) ''.join(blub_list)
Ich gebe zu - ist wohl die hässlichste Lösung, aber es lief :-)
Danke für eure mühe, ich werd es mal mit euren Lösungen noch ausprobieren.
lg,
... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage