从CSV fi选择特定行

2024-06-07 01:28:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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。但是,会返回意外结果。在

^{pr2}$

测试文件_清理.csv包含以下行:

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

它去掉了第一行的值,而不是基于是否为var3<;>1。对可能发生的事情有任何想法都将不胜感激!在


Tags: 文件csvcsvfileimportaswithopenwb
2条回答

使用python的默认文件读取,将把每一行作为一个单独的字符串,因此一行是“6.1,5.0,3420”。在您发布的代码中,row是那个字符串,所以row[2]将是它的第三个字符,或者在这一行中是“1”,因此您的代码忽略了这一行。典型的例子说明了python的非类型化美可以回来咬你!在

解决方案?你要用打开文件csv.reader,它自动用逗号分隔行,因此行“6.1,5.0,3420”将为[“6.1”,“5.0”,“3”,“420”]。下面是实现此目的的代码:

import csv

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

在写入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)

相关问题 更多 >