Seite 1 von 1

Split Funktion mit Ausnahmen?

Verfasst: Dienstag 17. Februar 2009, 17:37
von Patrick_S
Hallo zusammen,

ich bin neu hier - habe jedoch schon einige Zeit mit Python gespielt und hier viel mitgelesen.
zu meinem Problem hab ich bis jetzt keine Lösung gefunden:
Ich suche nach einer Möglichkeit, Zeilen per Komma zu trennen jedoch benötige ich Ausnahmen.

Eine Zeile kann wie folgt aussehen:
,2,3,4,5,"4,4",1,2,3,"5,6,5,6",,,
Alles was in Hochkommas steht soll als solches bestehenbleiben und nicht getrennt werden. Hochkommas können pro Zeile gar nicht, einmal oder mehrfach vorkommen.

Mein Code sah bis heute vor, den Inhalt zwischen den Hochkommas zu löschen - nun ist er doch von Bedeutung:

Code: Alles auswählen

p=re.compile('".*?"')
splitter = re.compile(',')
f = open('raw.txt','r')
output = open('output.txt','w')
for line in f.readlines():
    line = splitter.split(p.sub('',line))
[...]
Könnte man die Kommas zwischen den Hochkommas nicht zB. Semikolon ersetzen?

Freundliche Grüße
Patrick

Verfasst: Dienstag 17. Februar 2009, 17:55
von Trundle
Das [mod]csv[/mod]-Modul dürfte da recht hilfreich sein.

Vielen Dank!

Verfasst: Dienstag 17. Februar 2009, 18:00
von Patrick_S
Hallo,

csv reader kannte ich - nicht die dialect Funktion - das sollte mein Problem lösen.

Vielen Dank und Gruß
Patrick

Verfasst: Dienstag 17. Februar 2009, 18:12
von pudeldestodes
Du kannst den csv.reader auch ohne explizit einen Dialekt zu registrieren aufrufen:

Code: Alles auswählen

reader = csv.reader(csvfile, delimiter = ',', quotechar  = '"')

Funktioniert - vielen Dank!

Verfasst: Mittwoch 18. Februar 2009, 09:49
von Patrick_S
Hallo,

habe beides getestet und es funktioniert nun.

Vielen Dank für die schnelle hilfe.

Gruß
Patrick

Verfasst: Mittwoch 18. Februar 2009, 10:00
von sma
Die Aufgabe ist zwar gelöst, aber so könnte ein Miniparser aussehen, der die Aufgabe mit regulären Ausdrücken erledigt:

Code: Alles auswählen

import re

r = re.compile('"([^"]+)"|([^,])|,')
s = ',2,,3,4,5,"4,4",1,2,3,"5,6,5,6",,'

for m in r.finditer(s):
    if m.lastindex:
        print m.group(m.lastindex)
Stefan