在CSV文件中使用Python删除行

在CSV文件中使用Python删除行,python,csv,Python,Csv,我只想删除第三列中值为“0”的行。数据示例如下所示: 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”的行。数据示例如下所示:

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

如果第[2]行有任何帮助,都将非常有用“0”。否则它不会检查字符串值是否等于0。

您非常接近;当前,将
行[2]
与整数
0
进行比较,并与字符串
“0”
进行比较。从文件读取数据时,数据是字符串而不是整数,因此当前整数检查失败的原因如下:

row[2]!="0":
此外,您还可以使用
with
关键字使当前代码稍微有点pythonic,这样代码中的行就会减少,并且可以省略
。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”
的检查将起作用,因此您可以使用
条带(第[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

是的,我尝试得太早了,但它似乎也不起作用!是的,我正在查看输出文件我也尝试过,但无论它是设置为字符串还是整数,它似乎都不起作用我尝试了您编辑它的方式,我也尝试了执行strip(),但输出文件中仍有值为“0”的行!我已经运行过几次了,结果都是一样的。@WillB我不确定你在运行什么,我已经发布了我正在使用的输入和代码。也许,您应该在for循环中使用
pdb.set_trace()
语句来确定它不起作用的原因。我将我的csv转换为.txt,以查看它将其读取为“00.0000”,这是使其起作用的唯一方法。谢谢你帮我解决这个问题!