如何在某列中搜索CSV行中的字符串,如果找到则将整行打印到文件

时间:2016-10-06 03:35:12

标签: python string csv search

对不起,非常熟悉Python的初学者,可以真正使用一些帮助。

我有一个大的CSV文件,用逗号分隔的项目,我试图用Python完成。以下是CSV中一行的示例。

123123,JOHN SMITH,SMITH FARMS,A,N,N,12345 123 AVE,CITY,NE,68355,US,12345 123 AVE,CITY,NE,68355,US,(123)555-5555,(321 )555-5555,JSMITH @ HOTMAIL.COM,15-JUL-16,11111,2013,22-DEC-93,NE,2,1 \ par

我希望我的代码扫描每一行,只查看第9项(状态)。对于与我的查询匹配的每个项目,我都希望将整行写入CSV。

我遇到的问题是我的代码会在整个行中找到我的查询的每个次,而不仅仅是第9项。例如,如果我扫描查找" NE",它会在我的CSV中写上面的行,但也包含字符串" NEARY ROAD。"

对不起,如果我的术语已经关闭,那么,我是初学者。任何帮助将不胜感激。

我在下面列出了我的编码:

import csv

with open('Sample.csv', 'rb') as f, open('NE_Sample.csv', 'wb') as outf:
    reader = csv.reader(f, delimiter=',')
    writer = csv.writer(outf)
    for line in f:
        if "NE" in line:
             print ('Found: []'.format(line))
             writer.writerow([line])

2 个答案:

答案 0 :(得分:3)

您实际上并没有使用reader来阅读输入CSV,而只是从文件本身读取原始行。

固定版本如下所示(未经测试):

import csv

with open('Sample.csv', 'rb') as f, open('NE_Sample.csv', 'wb') as outf:
    reader = csv.reader(f, delimiter=',')
    writer = csv.writer(outf)
    for row in reader:
        if row[8] == 'NE':
             print ('Found: {}'.format(row))
             writer.writerow(row)

更改如下:

  • 我们不是迭代输入文件的行,而是遍历由reader解析的行(每个行都是行中每个值的list)。
  • 我们会检查行中的第9项(即row[8])是否等于"NE"
  • 如果是这样,我们将该行输出到输出文件,方法是将其按原样传递给编写者的writerow方法。
  • 我还修正了print声明中的拼写错误 - format方法使用大括号(不是方括号)来标记替换位置。

答案 1 :(得分:0)

此代码段应解决您的问题

import csv

with open('Sample.csv', 'rb') as f, open('NE_Sample.csv', 'wb') as outf:
    reader = csv.reader(f, delimiter=',')
    writer = csv.writer(outf)
    for row in reader:
        if "NE" in row:
            print ('Found: {}'.format(row))
            writer.writerow(row)
代码中的

if "NE" in line试图找出"NE"是否是字符串line的子字符串,其工作方式与预期无关。 line是输入文件的原始行。

如果您使用if "NE" in row:其中row解析了输入文件的行,那么您正在进行精确的元素匹配。