在CSV文件中使用Python删除行

Wil*_*l B 18 python csv

我想要做的就是删除一行,如果第三列中的值为'0'.数据的一个例子是:

6.5, 5.4, 0, 320
6.5, 5.4, 1, 320
Run Code Online (Sandbox Code Playgroud)

因此需要删除第一行而第二行将保留.

我到目前为止的内容如下:

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()
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒

mu *_*u 無 21

你非常接近; 目前你比较row[2]整数0,与字符串进行比较"0".当您从文件中读取数据时,它是一个字符串而不是整数,因此这就是您的整数检查当前失败的原因:

row[2]!="0":
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用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)
Run Code Online (Sandbox Code Playgroud)

请注意,这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
Run Code Online (Sandbox Code Playgroud)