Seite 1 von 1
string formatieren - raw
Verfasst: Freitag 26. Juni 2009, 10:04
von naked_chef
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
Verfasst: Freitag 26. Juni 2009, 10:42
von 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.
Verfasst: Freitag 26. Juni 2009, 10:51
von naked_chef
okay - vielleicht etwas blöd formuliert ...
ich kanne doch :
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.
Verfasst: Freitag 26. Juni 2009, 12:26
von fhoech
naked_chef hat geschrieben:
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?
Verfasst: Freitag 26. Juni 2009, 14:37
von naked_chef
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.
Verfasst: Freitag 26. Juni 2009, 18:11
von fhoech
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).
Verfasst: Montag 29. Juni 2009, 10:04
von naked_chef
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)