Ich verbinde mich mit einer API, um einige Daten zu erfassen. Die Ausgabe ist ein Bericht, der einen mehrzeiligen Header in Kombination mit einem herkömmlichen einzeiligen Header enthält.

Beispiel:

1. Document Name: Test
2. Document Date: 8/7/2015
3. Document ID: 3804804
4. Document Author: Joe Blow
5.
6. Date, ID, Name, Age, Sex, Result
7. 8/7/2015, 2808380, Sara Jenkings, 33, F, 208.20

Im Beispiel möchte ich die Zeilen 1 bis 5 überspringen und die Zeile in Zeile 6 als Kopfzeile und alle anderen Zeilen danach als normale Zeilen schreiben.

Jetzt weiß ich, wie man mit next(reader, None) eine Zeile überspringt, aber wie überspringe ich mehr als eine Zeile, wenn ich weiß, dass die Anzahl der zu überspringenden Zeilen wie im Beispiel konsistent 5 Zeilen beträgt?

Normalerweise würde ich eine Datenbank verwenden, um die Zeilen zu überspringen, aber ich möchte sehen, ob Python die Daten korrekt speichern kann, ohne dass die Datenbank mehr Arbeit leistet.

9
Fastidious 8 Aug. 2015 im 17:22

3 Antworten

Beste Antwort

Sie können itertools.islice verwenden und die gewünschte Zeile übergeben Beginnen Sie mit dem Schreiben von als zweitem Parameter. Wenn Zeile 6 auf 0 basiert, verwenden Sie 5. Wenn stop None ist, wird die Iteration fortgesetzt, bis der Iterator erschöpft ist

import  csv

from itertools import islice

with open("in.csv") as f, open("out.csv","w") as out:
    r = csv.reader(islice(f, start=5,stop=None))
    wr = csv.writer(out)
    wr.writerows(r)

Sie benötigen das CSV-Modul nicht unbedingt, wenn Sie die Zeilen unverändert lassen:

with open("in.csv") as f, open("out.csv","w") as out:
    r = islice(f, 5 ,None)
    out.writelines(r)
12
Padraic Cunningham 8 Aug. 2015 im 14:36

Überspringen von 5 Kopfzeilen mithilfe des Listenverständnisses:

import csv

nheaderlines = 5

with open(path + file) as csvfile:
    reader = csv.DictReader(csvfile)

    [next(reader, None) for item in range(nheaderlines)]

    for row in reader:
        print(row)
1
Siegfried Heide 4 Aug. 2018 im 11:34

Sie können einer for-Schleife einen Zähler und eine if-Anweisung hinzufügen.

count = 0
for line in opened_file:
    if count < 5:
        count += 1
        continue
    #Parse lines
2
ytpillai 8 Aug. 2015 im 15:52