Probleme mit document_src()

  • Ich möchte folgendes in Zope 2.7 anstellen:

    Ich möchte von einem externen Pythonscript ein Script im ZMI antriggern, dass den Sourceode aller dort hinterlegten DTML-Methoden, DTML-Dokumente und Python-Skripte durchsucht und beschtimmte Schlüsselwörter aus diesem Code in einer Liste abspeichert.

    Diese Liste wird returned und an das externe Skript zurückgegeben und dort anschließend mittels des Moduls xlwt in eine Excel-Tabelle geschrieben.

    Nun zu meinem Problem:

    Um den Sourcecode zu erhalten rufe ich die Methode "document_src()" auf dem jew. Objekt auf. Da der Code in Latin-1 codiert ist, ich aber utf-8 brauche, wandele ich ihn wie folgt um:

    myword = mywords.decode('latin1')
    myword = mywords.encode('utf-8')

    Und hier fängt mein Problem bereits an. Während im Original Code das Wort "Höhe" stand, gibt mir document_src() nach erfolgter Umkodierung und Speicherung in meiner Liste nicht das erwartete:mylist = ['H\xc3\xb6he', ....] wieder,
    sondern er hämmert unverständlicherweise den Backslash doppelt hinein:mylist = ['H\\xc3\\xb6he', ...]

    Beim Schreiben in die Exceltabelle macht Python dann folgerichtig kein "Höhe" mehr daraus,
    sondern entfernt lediglich ein Backslash. In der Tabelle steht also 'H\xc3\xb6he' statt "Höhe"

    Ich habe schon verschiedene Anläufe unternommen (zb. auf die Umwandlung nach utf-8 zu verzichten, aber auch die latin-1 strings werden mit doppelten statt einfachen backslashes versehen. Auch der Versuch mittels replace oder repr irgendwie den überflüssigen "\" loszuwerden scheiterten (Für Python is ja ein einziges "\" als Zeichen nicht existent).

    Hat jemand vielleicht einen zündenden Rat für mich wie ich mit document_src() an eine saubere Ausgabe des Codes komme?

    2 Mal editiert, zuletzt von MarcelK (1. Juli 2010 um 08:52)

  • Problem is solved now.

    The solution:

    I have to collect all the sourcecode into a single string. Appending them to a list and converting the list to a string will cause the "'" and "/" to freak out :)