只能通过csv读取器迭代一次[重复]

wlwcrazw  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(112)
    • 此问题在此处已有答案**:

Why can't I iterate twice over the same iterator? How can I "reset" the iterator or reuse the data?(5个答案)
Proper way to reset csv.reader for multiple iterations?(3个答案)
3天前关闭。
我有一个很长的字符串列表,还有一个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.阅读器(f)创建了一个只能循环一次的可迭代对象,我在其他地方看到过使用itertools的建议,但我发现的所有建议都是针对涉及循环CSV文件少量次数的问题,通常只有两次,如果我尝试使用这个来循环CSV文件很多次,我不确定这对内存消耗意味着什么,总的来说,我只是想知道解决这个问题的最聪明的方法。

g0czyy6m

g0czyy6m1#

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

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)

相关问题