kostenloser Webspace werbefrei: lima-city


In Python &#... in \... umwandeln

lima-cityForumProgrammiersprachenPython

  1. Autor dieses Themas

    frodo89

    Kostenloser Webspace von frodo89

    frodo89 hat kostenlosen Webspace.

    Hallo!

    Ich habe folgendes Problem:
    Ich möchte mit Python und urllib eine Website einlesen.
    In dieser kommen Unicode-Zeichen in der Form &#105 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,
    ...
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b

    Wenn du &# durch ein \ umwandeln willst, musst du ein Doppeltes Backslash \\ verwenden.
  4. k**********k

    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 &#105 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="&#105blabla&#124bliblablub&#278"
    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 :biggrin:

    Beitrag zuletzt geändert: 22.11.2009 21:14:47 von ketchupfleck
  5. Autor dieses Themas

    frodo89

    Kostenloser Webspace von frodo89

    frodo89 hat kostenlosen Webspace.

    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 = '&#54...'
    
    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,
    ...
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!