string formatieren - raw

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
naked_chef
User
Beiträge: 15
Registriert: Dienstag 3. Februar 2009, 10:02

moin moin,

ich habe ein kleines problem.
ich bin gerade dabei ein kleines ab feines script zu schreiben, wass aus exchange2007 exportierte csv-dateien eine html-seite erstellt.

das klappt soweit alles ganz gut, ausser umlaute.
ich lese die datei wie folgt aus:

Code: Alles auswählen

reader=csv.reader(open(file_to_use, "r"), delimiter=',')
danach in steht der "formatierungspart" in einer forschleife. das zugreiffen auf alle felder klappt auch sehr gut.

gibt es eine möglichkeit den inhalt einer variable nachträglich in einen raw-string umzuwandeln?

weil, im moment werden die sonderzeichen ignoriert wenn ich sie mit "re.sub" ändern will, da die informationen nicht im raw-format vorliegen.

habt ihr eine idee ?

danke
BlackJack

@naked_chef: Es gibt keinen Datentyp "raw-string". Die Kodierung in der CSV-Datei wird wahrscheinlich einfach nicht mit der Kodierung der HTML-Seite übereinstimmen, in die Du das einbettest. Da hilft nur umkodieren, oder die CSV-Datei vielleicht schon in der passenden Kodierung speichern.
naked_chef
User
Beiträge: 15
Registriert: Dienstag 3. Februar 2009, 10:02

okay - vielleicht etwas blöd formuliert ... :oops:

ich kanne doch :

Code: Alles auswählen

Dat=re.sub(r'\n', '<br>', Dat)
und das "r" steht dafür dass keine escape-sequenzen im folgenden string erlaubt sind.
und dass möchte ich jetzt auf den inhalt der variable "Dat" anwenden.

das richtige exportieren lässt exchange leider nicht zu.
die daten werden auf einem windowsserver im Windows/DOS format esxportiert und auf einem linux-system verarbeitet.
fhoech
User
Beiträge: 143
Registriert: Montag 9. April 2007, 18:26

naked_chef hat geschrieben:

Code: Alles auswählen

Dat=re.sub(r'\n', '<br>', Dat)
und das "r" steht dafür dass keine escape-sequenzen im folgenden string erlaubt sind.
Nicht ganz. Das "r" steht, dafür, dass im Code keine Escape-Sequenzen geparst werden. Du bekommst aber einen ganz normalen string. Beispiel:

Code: Alles auswählen

>>> r'\n'
'\\n' # 'Schrägstrich' 'n'
>>> r'\n' + '\n'
'\\n\n' # 'Schrägstrich' 'n' gefolgt von einem Zeilenumbruch
Was du möchtest, ist vielleicht eher:

Code: Alles auswählen

>>> '\n etwas text \n'.replace('\n', r'\n')
'\\n etwas text \\n'
Oder?
naked_chef
User
Beiträge: 15
Registriert: Dienstag 3. Februar 2009, 10:02

fhoech hat geschrieben: Was du möchtest, ist vielleicht eher:

Code: Alles auswählen

>>> '\n etwas text \n'.replace('\n', r'\n')
'\\n etwas text \\n'
Oder?
nein, es funktioniert leider nicht...

in der ausgangsdatei enthält das zweite feld "Dat" eine komplette mail.

lasse ich mir die datei mit "less -r" anzeigen stehen stat umlaute folgende zeichen in der datei "<81>" wass ein ü währe.

wenn ich die datei mit cat oder less ohne "-r" ausgeben lasse, sehe ich nur fragezeichen an den stellen wo umlaute sein sollten.
fhoech
User
Beiträge: 143
Registriert: Montag 9. April 2007, 18:26

Sorry, hab nicht komplett gelesen. Ich dachte, Du wolltest nur die Zeilenumbrüche o.ä. ersetzen.
Dann ist es so wie BlackJack schon geschrieben hat, sprich, das Encoding passt nicht. Hast Du schon versucht, die Daten aus Exchange in einem bestimmten Encoding zu speichern? Falls es da keine Wahl gibt, versuche mal, die Daten in Python als 'Windows-1252' einzulesen (per codecs.open).
naked_chef
User
Beiträge: 15
Registriert: Dienstag 3. Februar 2009, 10:02

moin moin,

also am exchange kann ich es mir leider nicht aussuchen welches encoding er verwenden soll für den export.

un python bringt mir bei der nutzung von

Code: Alles auswählen

reader=csv.reader(codecs.open(file_to_use,encoding="Windows-1252"), delimiter=',')
immer

Code: Alles auswählen

UnicodeEncodeError: 'ascii' codec can't encode character u'\u201e' in position 6: ordinal not in range(128)
Antworten