Eliminar filas con Python en un archivo CSV

Todo lo que me gustaría hacer es eliminar una fila si tiene un valor de ‘0’ en la tercera columna. Un ejemplo de los datos sería algo como:

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

Por lo tanto, la primera fila debería eliminarse, mientras que la segunda se mantendría.

Lo que tengo hasta ahora es el siguiente:

 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() 

Cualquier ayuda seria genial

Estás muy cerca; actualmente compara la row[2] con el entero 0 , haga la comparación con la cadena "0" . Cuando lees los datos de un archivo, es una cadena y no un entero, por lo que actualmente falla la comprobación de enteros:

 row[2]!="0": 

Además, puede usar la palabra clave with para hacer que el código actual sea un poco más python, de modo que las líneas en su código se reduzcan y pueda omitir las declaraciones de .close .

 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) 

Tenga en cuenta que la input es una incorporada de Python, así que en su lugar he usado otro nombre de variable.


Editar : Los valores en las filas de su archivo csv son comas y espacios separados; En un csv normal, serían simplemente separados por comas y un chequeo contra "0" funcionaría, por lo que puede usar la strip(row[2]) != 0 , o un chequeo contra " 0" .

La mejor solución sería corregir el formato csv, pero en caso de que quiera mantener el actual, lo siguiente funcionará con su formato de archivo csv dado:

 $ 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 

Deberías tener if row[2] != "0" . De lo contrario, no está comprobando si el valor de la cadena es igual a 0.