2017-04-07 2 views
0

Ich versuche, ein Batch-Lesen der CSV-Datei zu tun und den Batch durch einen Rückruf zu verarbeiten.Python Batch-Lesung von CSV-Datei

import csv 

with open('file.csv', 'r') as csvfile: 
    reader = csv.reader(csvfile) 
    header = next(reader) # skip header 

    batch_size = 3 
    batch = [] 
    count = 0 

    for row in reader: 
     if count >= batch_size: 
      do_something(batch) 
      batch = [] 
      count = 0 

     batch.append(row) 
     count += 1 

Lassen Sie uns die CSV-Datei hat 10 Zeilen übernehmen (ohne Header) und ein batch_size 3. Das erwartete Ergebnis sollte 4 Chargen sein. 3 Chargen mit 3 Reihen und die 4. Charge enthält nur die 1 Reihe. Der Code, den ich schrieb, produziert nur 3 Chargen. Wenn die Losgröße 1/2/5/10 ist, ist alles in Ordnung.

Antwort

4

Ihre Bedingung count >= batch_size wird nicht True für die letzten paar Zeilen, falls die Anzahl der Zeilen nicht durch batch_size geteilt werden kann, ohne einen Rest zu erzeugen.

Daher müssen Sie den letzten Batch/Rest manuell löschen. so etwas wie dies kurz nach dem Anfügen for-Schleife:

if batch: 
    do_something(batch) 

Dies ruft Ihre Funktion wieder, falls die letzten Zeilen in batch angesammelt worden (was Ihre Schleife bereits der Fall ist, wie es alle Zeilen über iteriert verfügbar) .