对不起,非常熟悉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])
答案 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
)。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
解析了输入文件的行,那么您正在进行精确的元素匹配。