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

Python 如何在CSV行中搜索特定列中的字符串,如果找到,则将整行打印到文件中,python,string,csv,search,Python,String,Csv,Search,很抱歉,我是Python的初学者,需要一些帮助 我有一个很大的CSV文件,项目之间用逗号分隔,我正试图用Python处理它。以下是CSV中的一行示例 美国东北部城市123大街12345号,美国东北部城市123大街12345号,美国东北部城市123大街12345号,美国东北部城市68355号,史密斯农场123123号,(123)555-5555,(321)555-5555,JSMITH@HOTMAIL.COM,16111112013年7月15日,1993年12月22日,东北,2,1\par 我希望

很抱歉,我是Python的初学者,需要一些帮助

我有一个很大的CSV文件,项目之间用逗号分隔,我正试图用Python处理它。以下是CSV中的一行示例

美国东北部城市123大街12345号,美国东北部城市123大街12345号,美国东北部城市123大街12345号,美国东北部城市68355号,史密斯农场123123号,(123)555-5555,(321)555-5555,JSMITH@HOTMAIL.COM,16111112013年7月15日,1993年12月22日,东北,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])

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

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

更改如下:

  • 我们不是迭代输入文件的行,而是迭代由
    读取器
    解析的行(每个行都是该行中每个值的
    列表
  • 我们检查行中的第9项(即
    行[8]
    )是否等于
    “NE”
  • 如果是这样,我们将该行按原样传递到编写器的
    writerow
    方法,从而将其输出到输出文件
  • 我还修复了您的
    打印
    语句中的一个打字错误-
    格式
    方法使用大括号(而不是方括号)来标记替换位置

这个片段应该可以解决您的问题

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)
如果代码中的第
行中的“NE”正在尝试确定
“NE”
是否是字符串
的子字符串,其工作方式不符合预期。
是输入文件的原始行


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

@J.Folkens:没问题!
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)