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

标签 python csv iteration

所以我基本上有一个非常长的字符串列表,以及一个包含一列字符串和一列数字的 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)

关于python - 只能通过 csv 阅读器迭代一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27350944/

相关文章:

python - 无法在Anaconda中导入openCV

BASH:根据公共(public)字段名称加入 2 个 CSV 文件

c - 作为迭代函数非递归运行 picoC

python - 迭代 pandas 数据框并将新值插入空列

python - 使用python命令行在sublime text 3中删除文件

Python - 如何安装 xlutils?

python - 添加脚本以将 python 结果从 json 导出到 excel 或 csv 文件

python - 如何根据给定的标准将一个csv文件拆分为多个csv?

将递归二叉树遍历转换为迭代

python - 在 Django 1.3 media_url 与 static_url 中显示样式