2015-04-19 131 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

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