我下载每周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:
我只是不确定是什么。
答案 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
会找到它(因为在这种情况下它是该行的子字符串)。
如果是任何引用,你就会生成无效输出,而更简单的代码就是正确的。