2015-04-19 35 views
10

Ich möchte nur eine Zeile löschen, wenn sie in der dritten Spalte den Wert '0' hat. Ein Beispiel für die Daten wäre etwas wie:Löschen von Zeilen mit Python in einer CSV-Datei

6.5, 5.4, 0, 320 
6.5, 5.4, 1, 320 

Also die erste Zeile müsste gelöscht werden, während die zweite bleiben würde.

Was ich bisher habe, ist wie folgt:

import csv 
input = open('first.csv', 'rb') 
output = open('first_edit.csv', 'wb') 
writer = csv.writer(output) 
for row in csv.reader(input): 
    if row[2]!=0: 
     writer.writerow(row) 
input.close() 
output.close() 

Jede Hilfe

+0

Sieht gut zu mir - was ist die Frage? – alfasin

Antwort

12

Sie sind sehr nah dran; Derzeit vergleichen Sie die row[2] mit der ganzen Zahl 0, machen Sie den Vergleich mit der Zeichenfolge "0". Wenn Sie die Daten aus einer Datei lesen, ist es ein String und keine ganze Zahl ist, so dass, warum Check Ihre ganze Zahl ist derzeit nicht:

row[2]!="0": 

Sie können aber auch das with Schlüsselwort verwenden den aktuellen Code zu machen etwas mehr pythonic so dass die Leitungen in Ihrem Code reduziert werden und Sie können die .close Aussagen auslassen:

import csv 
with open('first.csv', 'rb') as inp, open('first_edit.csv', 'wb') as out: 
    writer = csv.writer(out) 
    for row in csv.reader(inp): 
     if row[2] != "0": 
      writer.writerow(row) 

Beachten Sie, dass input ein Python builtin ist, also habe ich stattdessen einen anderen Variablennamen verwendet.


bearbeiten: Die Werte in der CSV-Datei der Zeilen Komma und Leerzeichen getrennt; In einem normalen CSV, würden sie einfach durch Komma getrennt und eine Prüfung gegen "0" würde funktionieren, so dass Sie entweder strip(row[2]) != 0 verwenden können, oder überprüfen Sie gegen " 0".

Die bessere Lösung wäre, das CSV-Format zu korrigieren, aber falls Sie mit dem aktuellen beharren, die folgenden mit Ihrem angegebenen CSV-Datei-Format arbeiten:

$ cat test.py 
import csv 
with open('first.csv', 'rb') as inp, open('first_edit.csv', 'wb') as out: 
    writer = csv.writer(out) 
    for row in csv.reader(inp): 
     if row[2] != " 0": 
      writer.writerow(row) 
$ cat first.csv 
6.5, 5.4, 0, 320 
6.5, 5.4, 1, 320 
$ python test.py 
$ cat first_edit.csv 
6.5, 5.4, 1, 320 
+0

Ich habe das auch versucht, aber es scheint nicht zu funktionieren, unabhängig davon, ob es als String oder Integer gesetzt ist –

+0

Ya es funktioniert immer noch nicht seltsam –

+0

Ich habe versucht, wie Sie editiert, und ich habe auch versucht, einen strip() zu machen, aber die Ausgabedatei hat immer noch die Zeilen mit '0' Werten! –

1

groß sein würde Sie if row[2] != "0" haben sollte. Andernfalls wird nicht überprüft, ob der Zeichenfolgenwert gleich 0 ist.

+0

Ja, das habe ich auch schon früher versucht, aber es schien auch nicht zu funktionieren! –

+0

Sie betrachten 'first_edit.csv', richtig? –

+0

Ja, ich schaue auf die Ausgabedatei –

Verwandte Themen