Sei molto vicino; al momento si confronta il row[2]
con numero intero 0
, si effettua il confronto con la stringa "0"
. Quando si leggono i dati da un file, esso è una stringa e non un intero, così che è il motivo per cui il tuo assegno intero non riesce attualmente:
row[2]!="0":
Inoltre, è possibile utilizzare la parola chiave with
per rendere il codice corrente un po 'più divinatorio modo che le linee nel codice sono ridotti ed è possibile omettere le .close
dichiarazioni:
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)
Nota che input
è un builtin Python, così ho usato un altro nome di variabile, invece.
Edit: I valori nelle righe del file CSV sono VIRGOLA e spazio separato; In un normale csv, sarebbero semplicemente separati da virgole e un controllo contro "0"
funzionerebbe, quindi è possibile utilizzare strip(row[2]) != 0
o controllare " 0"
.
La soluzione migliore sarebbe quella di correggere il formato csv, ma nel caso in cui si vuole persistere con quella attuale, il seguente corretto funzionamento con il dato formato file CSV:
$ 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
guarda bene a me - cosa è la domanda? – alfasin