2015-04-19 149 views
10

Tutto ciò che vorrei fare è eliminare una riga se ha un valore di "0" nella terza colonna. Un esempio dei dati sarebbe qualcosa di simile:Eliminazione di righe con Python in un file CSV

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

Quindi la prima fila avrebbe bisogno di essere cancellati mentre il secondo sarebbe rimasto.

Quello che ho finora è la seguente:

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

Qualsiasi aiuto sarebbe grande

+0

guarda bene a me - cosa è la domanda? – alfasin

risposta

12

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 
+0

Ho provato anche quello, ma non sembra funzionare a prescindere se è impostato come stringa o numero intero –

+0

Ya non funziona ancora stranamente –

+0

Ho provato il tuo modo lo ho modificato, e ho anche provato a fare una strip(), ma il file di output ha ancora le righe con i valori '0'! –

1

Si dovrebbe avere if row[2] != "0". Altrimenti non sta controllando per vedere se il valore della stringa è uguale a 0.

+0

Sì, l'ho provato anche in precedenza, ma non sembrava funzionare! –

+0

Stai guardando 'first_edit.csv', giusto? –

+0

Sì, sto guardando il file di output –

Problemi correlati