Problem mit "-Zeichen bei Datenverarbeitung

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
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Hallo zusammen,

bin dabei Python zu erlernen.

Folgendes Beispiel, macht mir Probleme:
10" & 19" Schrank-Systeme 10" Stand-/Wandverteiler, Digitus
Wenn ich obige Daten mit dem csv-Modul in eine neue Datei schreibe, erhalte folgendes Ergebnis:
"10""&19""-SCHRANK-SYSTEME" "10""-STAND-/WANDVERTEILER,-DIGITUS"
Das Anführunszeichen, was hier das Zeichen für Zoll (Längeneinheit) ist, wird von weiteren Anführunszeichen eingeschlossen, was dann bei der späteren Textausgabe absolut beschissen aussieht.

Die Basisdatei ist TAB-getrennt und bei der Weiterverarbeitung setze ich auch TAB als Delimiter ein.

Als Vorablösung habe ich das "-Zeichen durch 'ZOLL' ersetzt, was natürlich nicht so elegant aussieht.
10ZOLL&19ZOLL-SCHRANK-SYSTEME 10ZOLL-STAND-/WANDVERTEILER,-DIGITUS
Gibt es eine Möglichkeit das "-Zeichen zu nutzen, ohne daß es wieder mit Anführungszeichen umschlossen wird?

Grüße Nobuddy
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Du kannst doch einfach ein anderes quotechar wählen, oder? Außerdem sieht mir Dialect.doublequote recht vielversprechend aus…

lG

brb
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Barabbas hat geschrieben:Du kannst doch einfach ein anderes quotechar wählen, oder? Außerdem sieht mir Dialect.doublequote recht vielversprechend aus…
Ok, das mit dem anderen quotechar funktioniert!

Code: Alles auswählen

with open(filename, "w") as zielfile:
    writer = csv.writer(zielfile, delimiter="\t", quotechar="'")
Alternativ habe ich mir auch Dialect.doublequote angeschaut, allerdings ist mein Englisch fast Null.
Habe einen Übersetzer bemüht, mir ist aber noch nicht klar, wie dies umzusetzen ist?

Grüße Nobuddy
BlackJack

@Nobuddy: Das escapen der " auf diese Weise ist aber Quasi-Standard. Was meinst Du mit Textausgabe die besch… aussieht? Der Dateiinhalt ist ja nun nicht unbedingt zum ansehen gedacht und wenn man die Daten wieder über das CSV-Modul lädt, oder zum Beispiel in andere Software wie Tabellenkalkulationen, dann werden die zusätzlichen " wieder entfernt und man hat den ursprünglichen Text.
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

BlackJack hat geschrieben:@Nobuddy: Das escapen der " auf diese Weise ist aber Quasi-Standard. Was meinst Du mit Textausgabe die besch… aussieht? Der Dateiinhalt ist ja nun nicht unbedingt zum ansehen gedacht und wenn man die Daten wieder über das CSV-Modul lädt, oder zum Beispiel in andere Software wie Tabellenkalkulationen, dann werden die zusätzlichen " wieder entfernt und man hat den ursprünglichen Text.
Das war mir nicht klar, dachte das würde dann erhalten blieben und den Text verunschönen.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Selbstredend sollte man sich dabei aber an gängige Standards halten, sodass die Fremdsoftware auch tatsächlich später wieder das Zeichen entfernt. Dürfte aber an sich auch klar sein.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Viele dieser Probleme wären dann obsolet, wenn Nobuddy sich irgend wann einmal an Datenbanken heran wagte. Dann wäre es ein One-way Problem und er müsste nicht ständig noch auf selbst generierte CSV-Dateien als DB-Ersatz zurückgreifen ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Nobuddy
User
Beiträge: 996
Registriert: Montag 30. Januar 2012, 16:38

Hyperion hat geschrieben:Viele dieser Probleme wären dann obsolet, wenn Nobuddy sich irgend wann einmal an Datenbanken heran wagte. Dann wäre es ein One-way Problem und er müsste nicht ständig noch auf selbst generierte CSV-Dateien als DB-Ersatz zurückgreifen ;-)
Immer ein Schritt nach dem Anderen ..., aber dann spendiere ich eine Runde! :wink:
Antworten