从CSV文件

时间:2018-05-31 07:04:24

标签: python csv

我在csv文件中有以下行

import csv

with open('testfile.csv', 'wb') as csvfile:
    filewriter = csv.writer(csvfile, delimiter = ',')
    filewriter.writerow(['var1', 'var2', 'var3', 'var4'])
    filewriter.writerow(['var1', 'var2', 'var3', 'var4'])
    filewriter.writerow([6.1, 5.0, 3, 420])
    filewriter.writerow([6.2, 5.9, 2, 520])
    filewriter.writerow([6.5, 5.4, 1, 320])

我的目标是删除重复的行,只选择var3!= 1的行。但是,会返回意外的结果。

with open('testfile.csv', 'rb') as infile, open('testfile_clean.csv', 'wb') as outfile:
    infile.next()
    for row in infile:
        if row[2] != '1':
            outfile.write(row)

testfile_clean.csv包含以下行:

var1,var2,var3,var4
6.2,5.9,2,520
6.5,5.4,1,320

它除去了第一行的值,而不是基于var3<> ' 1&#39 ;.任何关于可能发生的事情的想法都将不胜感激!

2 个答案:

答案 0 :(得分:2)

使用python的默认文件读取,将为每行提供一个单独的字符串,因此一行将为“6.1,5.0,3,420”。在您发布的代码中,row是该字符串,因此row [2]将是其第三个字符,或者在此行的情况下为“1”,因此您的代码忽略了该行。经典的例子,蟒蛇无条件的美丽可以回来咬你!

解决方案?您将要使用csv.reader打开该文件,该文件会自动按逗号分隔行,以便“6.1,5.0,3,420”行为[“6.1”,“5.0”,“3”,“ 420" 。这是代码:

setInterval

答案 1 :(得分:0)

在写入csv文件时,您正在使用writerow,它可以为每个条目写入列表。为了读取相同的数据,您需要使用reader,它可以遍历每一行,您的条目将被视为列表。

import csv

with open('testfile.csv', 'r') as infile, open('testfile_clean.csv', 'w') as outfile:
    rows = csv.reader(infile)
    next(rows)
    writer = csv.writer(outfile)

    for row in rows:
        print(row)
        if row[2] != '1':
            writer.writerow(row)
相关问题