根据行内容拉出CSV的特定行

时间:2013-10-25 20:04:09

标签: python csv

我下载每周CSV文件,我只需要一些特定的数据行。所有相关的行都以“Invoice”开头,这是我希望Python查找的标准。我只是不确定如何告诉程序这样做。

我尝试过使用它:

import csv
with open("OpenInvList_9428.csv" , 'rb') as file:
    reader = csv.reader(file, delimiter = ',')
    for row in reader:
        if "Invoice" in row:
            print ','.join(row)

我对此陈述有所了解是错误的:

if "Invoice" in row:

我只是不确定是什么。

1 个答案:

答案 0 :(得分:1)

如果该行以Invoice开头,那么该行中的第一列必须以Invoice开头,对吧?所以:

with open("OpenInvList_9428.csv" , 'rb') as file:
    reader = csv.reader(file, delimiter = ',')
    for row in reader:
        if row[0].startswith('Invoice'):
            print ','.join(row)

您尝试if "Invoice" in row:检查是否有任何列正好"Invoice" - 也就是说,如果行以Invoice,开头,它将起作用,但如果它开始与Invoice 23,,它不会。那是因为row是一个字符串列表,而不是一个字符串,这就是in对列表的作用。

如果你想检查任何列是否有Invoice作为子字符串,那就是:

if any('Invoice' in column for column in row):

或者,检查是否有任何列以Invoice开头:

if any(column.startswith('Invoice') for column in row):

但是,如果您要解析CSV的唯一原因是将其重新连接到另一个CSV,那么您为什么要这样做呢?如果CSV中没有引用,您可以更简单地执行相同的操作:

with open("OpenInvList_9428.csv" , 'rb') as file:
    for line in file:
        if line.startswith('Invoice'):
            print line

在那里,如果'Invoice' in line是任何列的子字符串,Invoice会找到它(因为在这种情况下它是该行的子字符串)。

如果任何引用,你就会生成无效输出,而更简单的代码就是正确的。