2015-04-19 164 views
10

我想要做的就是刪除一行,如果它在第三列中的值爲'0'。數據的一個例子是這樣的:用CSV文件刪除Python中的行

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

所以第一行需要刪除,而第二行將留下。

我有什麼到目前爲止如下:

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

任何幫助將是巨大的

+0

看起來好像沒什麼問題 - 什麼是問題嗎? – alfasin

回答

12

你非常接近;目前,您將row[2]與整數0進行比較,並與字符串"0"進行比較。當您從文件中讀取數據,它是一個字符串,而不是一個整數,所以這就是爲什麼你的整數檢查當前失敗:

row[2]!="0": 

此外,您還可以使用with關鍵字使當前代碼略多Python的,這樣在你的代碼行數減少,那麼你可以省略.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) 

注意input是一個Python內置的,所以我用另一個變量名代替。


編輯:在您的CSV文件的行中的值以逗號空間分開;在正常的csv中,它們將簡單地用逗號分隔,並且可以對"0"進行檢查,因此您可以使用strip(row[2]) != 0或對照" 0"進行檢查。

更好的解決辦法是糾正csv格式,但如果你想使用當前一個堅持,下面將與您指定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

我也嘗試過,但它似乎並不工作,無論它是否設置爲字符串或整數 –

+0

雅它仍然不是奇怪的工作 –

+0

我試過你的方式編輯它,我也試圖做一個strip(),但輸出文件仍然有'0'值的行! –

1

你應該有if row[2] != "0"。否則,它不檢查字符串值是否等於0.

+0

是的,我確實嘗試過,但它似乎也沒有效果! –

+0

你正在看''first_edit.csv',對吧? –

+0

是的,我正在看輸出文件 –