0

我每周下载 CSV 文件,我只需要几行特定的数据。所有相关行都以“发票”开头,这是我希望 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:

我只是不确定是什么。

4

1 回答 1

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是任何列的子字符串,就会找到它(因为在这种情况下,它是该行的子字符串)。

如果有任何引用,您将生成无效的输出,而更简单的代码则正确。

于 2013-10-25T20:06:47.807 回答