Salve
ich bin neu hier und noch nicht sicher, wo ich dieses Thema posten soll
Ich lese in Python ein csv-File ein, welches Kommata als Spaltenseparatoren verwendet.
Das File lese ich zuerst mit .readlines und liefert einzelne Zeilen.
Diese Zeilen teile ich mit split auf
In der ersten Zeile bestimme ich die Spaltenköpfe und die gesuchten Spaltennummern.
Allerdings habe ich in manchen Zeilen Einträge, die in der Spalte auch ein Komma im Eintrag enthalten
Im Debugger werden diese Einträge mit Anführungszeichen angezeigt.
Die Split-Funktion ignoriert mir diese und teilt dies auf.
Beispiel
Zeile: 'Eintrag1,Eintrag2,"Eintrag3, 4",Eintrag5'
Beabsichtigte, gewünschte Aufteilung wäre ( die // zur Verdeutlichung )
Eintrag1 // Eintrag2 // Eintrag3, 4 // Eintrag5
Der Split liefert aber
'Eintrag1 // Eintrag2 // Eintrag3 // 4 // Eintrag5
Wie schaffe ich das, dass der dritte Spalteneintrag als "Eintrag3, 4" nach dem Split erhalten bleibt?
Danke
Thomas
csv mit Separator-Zeichen im Einzeleintrag
-
geraldfo
- User
- Beiträge: 82
- Registriert: Samstag 28. Januar 2023, 20:19
- Wohnort: Nähe Wien
- Kontaktdaten:
Vielleicht hilfreich:
https://docs.python.org/3/library/csv.html
https://docs.python.org/3/library/csv.html
- noisefloor
- User
- Beiträge: 4307
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
die Lösung ist: nicht selber machen, sondern das passende Modul verwenden, siehe vorheriger Beitrag. Da kannst du dem CSV Reader auch mitgeben, was der `separator` ist - nämlich bei dir das Komma - und was der `quotechar` ist - nämlich bei dir die Anführungszeichen.
Gruß, noisefloor
die Lösung ist: nicht selber machen, sondern das passende Modul verwenden, siehe vorheriger Beitrag. Da kannst du dem CSV Reader auch mitgeben, was der `separator` ist - nämlich bei dir das Komma - und was der `quotechar` ist - nämlich bei dir die Anführungszeichen.
Gruß, noisefloor
Danke
werde ich testen; hatte ich bisher nur am Rande gesehen, aber beim ersten Lesen immer ein paar Sachen gesehen, die mir da quer schossen, bswp. dass wohl alles per String kommt und manchmal mit umschlossenen Anführungszeichen.
Hat jemand einen Tip für aussagekräftigen Beispielcode?
Danke
thomas
werde ich testen; hatte ich bisher nur am Rande gesehen, aber beim ersten Lesen immer ein paar Sachen gesehen, die mir da quer schossen, bswp. dass wohl alles per String kommt und manchmal mit umschlossenen Anführungszeichen.
Hat jemand einen Tip für aussagekräftigen Beispielcode?
Danke
thomas
- __blackjack__
- User
- Beiträge: 14341
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Thomas67: Wenn Du die einzelnen Zeilen (= Zeichenketten) selber zerlegst, bekommst Du ja auch Zeichenketten. Und Anführungszeichen in einzelnen Zellen bekommt man nur wenn da auch tatsächlich Anführungszeichen drin sind. Bei Deinem Beispiel sind keine _in_ den Zellen:
Tipp für Beispielcode wäre die Dokumentation vom `csv`-Modul.
Code: Alles auswählen
>>> next(csv.reader(io.StringIO('Eintrag1,Eintrag2,"Eintrag3, 4",Eintrag5', newline="")))
['Eintrag1', 'Eintrag2', 'Eintrag3, 4', 'Eintrag5']“It is easier to optimize correct code than to correct optimized code.” — Bill Harlan
