Python: Spalten von csv.DictReader entfernen

OP #4875004
Lesenswert?

Hallo zusammen,
ich lese eine Reihe von CSV-Dateien ein und konvertiere sie in Python.
1
reader = csv.DictReader(file, delimiter=";")
2
next(reader)
3
out = json.dumps([row for row in reader])

Das Problem ist: einige CSV-Dateien haben am Ende ein abschließendes 
Semikolon. Die Ausgabe einer Reihe von reader lautet dann z.B.:
1
{'': '', 'A': '111', 'B': '222', 'C': '333'}

Gibt es eine elegante Möglichkeit die Spalte '': '' rauszufiltern? Auf 
die Eingangsdaten habe ich so erstmal keinen Einfluss.

Gruß
Dennis
Gast #4875061
Lesenswert?

Wenn es dir um die Performance bei großen Dateien geht - du hast doch 
sicher sed zur Hand?

Dann einfach (auch mit Python vorher / os.popen oder auch anders):

sed 's/;$//' datei.csv > datei_ohne_trailing_semikolon.csv
#4875172
Lesenswert?

Der Parameter file in csv.DictReader
"can be any object which supports the iterator protocol and returns a 
string each time its __next__() method is called — file objects and list 
objects are both suitable"

Deshalb kann man eine Generator-Funktion zwischen Datei und Konstruktor 
schummeln, die die Zeilen vorbearbeitet:
1
def fix_lines(infile):
2
    for line in infile:
3
        yield line.rstrip().rstrip(';')
4

5
content = open('1.csv')
6
reader = csv.DictReader(fix_lines(content), delimiter=";")
7
next(reader)
8
out = json.dumps([row for row in reader])
9
print(out)
OP #4876172
Lesenswert?

Danke für eure Anregungen.

@Tom K: Die Möglichkeit mit Generatoren zu arbeiten kenne ich, ist mir 
aber noch nicht so richtig in Fleisch und Blut übergegangen.

Im Endeffekt probiere ich es erstmal mit dem "Preprocessing" und dem 
Neuschschreiben einer Datei. Es wird sich zeigen ob das wirklich ein 
Problem darstellt.

Gruß
Dennis

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren