2014-12-08 40 views
5

所以我基本上有一个非常长的字符串列表,以及一个包含一列字符串和一列数字的CSV文件。我需要遍历很长的字符串列表,并为每个字符串循环遍历CSV文件的行,检查CSV第一列中的每个字符串以查看它是否出现在我的字符串中,如果是,请添加另一列中的数字为某事。 A排序例如最小的是只能通过csv阅读器迭代一次

import csv 
sList = ['a cat', 'great wall', 'mediocre wall'] 
vals = [] 
with open('file.csv', 'r') as f: 
    r = csv.reader(f) 
    for w in sList: 
     val = 0 
     for row in r: 
      if row[0] in w: 
       val += 1 
     vals.append(val) 

一个CSV文件示例与我可能会使用这可能是

a, 1 
great, 2 

当然csv.reader(六)创建一个迭代,我可以循环只通过一次。我在其他地方看到过使用itertools的建议,但是我发现的所有建议都是针对涉及通过CSV文件循环几次的问题,通常只是两次。如果我试图用这种方法循环播放CSV很多次,我不确定这会对内存消耗产生什么影响,并且通常我只是想知道如何解决这个问题。

+0

多大的文件?你能否将整个事物读入字典并对结果字典进行查找? – 2014-12-08 03:33:51

回答

7

你需要“重置”文件迭代器:

import csv 
sList = ['a cat', 'great wall', 'mediocre wall'] 
vals = [] 
with open('data.csv', 'r') as f: 
    r = csv.reader(f) 
    for w in sList: 
     val = 0 
     f.seek(0) #<-- set the iterator to beginning of the input file 
     for row in r: 
      print(row) 
      if row[0] in w: 
       val += 1 
     vals.append(val) 
+0

有趣的,我会试试这个 - 但你确定我设置了f.seek(0)而不是r.seek(0)?只是检查,谢谢你的帮助! – Addem 2014-12-08 03:40:23

+1

@Addem。我确定,我在python 3.4上发布之前测试过。 – Marcin 2014-12-08 03:42:06