2014-12-08 59 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