只能通过csv阅读器迭代一次


问题内容

因此,我基本上有一个非常长的字符串列表,以及一个包含一列字符串和一列数字的CSV文件。我需要遍历非常长的字符串列表,对于每个字符串,遍历CSV文件的行,检查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(f)创建一个可迭代的对象,我只能循环一次。我在其他地方看到过使用itertools的建议,但是我发现的所有建议都是针对涉及循环访问CSV文件几次(通常只有两次)的问题。如果我尝试使用它多次遍历CSV,我不确定这对内存消耗意味着什么,总的来说,我只是想知道解决此问题的最聪明方法。


问题答案:

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

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)