Überspringen Sie die Header beim Bearbeiten einer CSV-Datei mit Python

Ich benutze unten genannten Code, um eine CSV mit Python zu bearbeiten. functionen, die im Code aufgerufen werden, bilden den oberen Teil des Codes.

Problem: Ich möchte, dass der unten angegebene Code mit der Bearbeitung des CSV aus der zweiten Zeile beginnt. Ich möchte, dass die erste Zeile, die Header enthält, ausgeschlossen wird. Im Moment werden nur die functionen in der ersten Zeile angewendet und meine Kopfzeile wird geändert.

in_file = open("tmob_notcleaned.csv", "rb") reader = csv.reader(in_file) out_file = open("tmob_cleaned.csv", "wb") writer = csv.writer(out_file) row = 1 for row in reader: row[13] = handle_color(row[10])[1].replace(" - ","").strip() row[10] = handle_color(row[10])[0].replace("-","").replace("(","").replace(")","").strip() row[14] = handle_gb(row[10])[1].replace("-","").replace(" ","").replace("GB","").strip() row[10] = handle_gb(row[10])[0].strip() row[9] = handle_oem(row[10])[1].replace("Blackberry","RIM").replace("TMobile","T-Mobile").strip() row[15] = handle_addon(row[10])[1].strip() row[10] = handle_addon(row[10])[0].replace(" by","").replace("FREE","").strip() writer.writerow(row) in_file.close() out_file.close() 

Ich habe versucht, dieses Problem zu lösen, indem ich die Zeilenvariable auf 1 initialisierte, aber es hat nicht funktioniert.

Bitte helfen Sie mir bei der Lösung dieses Problems.

Ihre reader ist eine iterierbare Variable, durch die Sie die Zeilen abrufen.

Um ein Element vor der Schleife zu überspringen, rufen Sie einfach next(reader, None) und ignorieren den Rückgabewert.

Sie können Ihren Code auch ein wenig vereinfachen; Verwenden Sie die geöffneten Dateien als Kontextmanager, damit sie automatisch geschlossen werden:

 with open("tmob_notcleaned.csv", "rb") as infile, open("tmob_cleaned.csv", "wb") as outfile: reader = csv.reader(infile) next(reader, None) # skip the headers writer = csv.writer(outfile) for row in reader: # process each row writer.writerow(row) # no need to close, the files are closed automatically when you get to this point. 

Wenn Sie den Header unverarbeitet in die Ausgabedatei schreiben writer.writerow() , können Sie auch die Ausgabe von next() an writer.writerow() :

 headers = next(reader, None) # returns the headers or `None` if the input is empty if headers: writer.writerow(headers) 

Eine andere Möglichkeit, dies zu lösen, ist die Verwendung der DictReader-class, die die Kopfzeile “überspringt” und sie verwendet, um die benannte Indizierung zuzulassen.

Gegeben “foo.csv” wie folgt:

 FirstColumn,SecondColumn asdf,1234 qwer,5678 

Verwenden Sie DictReader wie folgt:

 import csv with open('foo.csv') as f: reader = csv.DictReader(f, delimiter=',') for row in reader: print(row['FirstColumn']) # Access by column header instead of column number print(row['SecondColumn']) 

Doing row=1 ändert nichts, weil Sie das nur mit den Ergebnissen der Schleife überschreiben.

Sie möchten als next(reader) eine Zeile überspringen.