繁体   English   中英

从CSV文件中选择特定的行

[英]Selecting specific rows from CSV file

我在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'。 关于可能发生的任何想法将不胜感激!

使用python的默认文件读取功能,会将每一行作为单独的字符串提供给您,因此一行将是“ 6.1,5.0,3,420”。 在您发布的代码中,row是该字符串,因此row [2]将是其第三个字符,在此行的情况下为“ 1”,因此您的代码将忽略此行。 python的无类型之美可以再次咬你的经典例子!

解决方案? 您将要使用csv.reader打开文件,该文件会自动以逗号分隔行,以使行“ 6.1,5.0,3,420”为[“ 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 ,该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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM