Python-首次读取后CSV为空

Python-首次读取后CSV为空,python,python-3.x,csv,Python,Python 3.x,Csv,我有一个.csv文件,看起来是这样的:,我必须打开这个文件并处理几百万次数据,我的代码使用的是和open()作为f:,但后来我意识到它可能会非常慢,因为它每次都打开文件,所以我尝试将该数据放入变量,以后再使用它,问题是数据在第一次读取后消失,这是我的密码: import csv TEST = open("C:/Users/Krzysztof/Documents/SO.csv") CCSSVV = csv.DictReader(TEST, delimiter=";") def printdat

我有一个.csv文件,看起来是这样的:,我必须打开这个文件并处理几百万次数据,我的代码使用的是
和open()作为f:
,但后来我意识到它可能会非常慢,因为它每次都打开文件,所以我尝试将该数据放入变量,以后再使用它,问题是数据在第一次读取后消失,这是我的密码:

import csv

TEST = open("C:/Users/Krzysztof/Documents/SO.csv")
CCSSVV = csv.DictReader(TEST, delimiter=";")

def printdate(FILE):
    print("start")
    for LINE in FILE:
        print(LINE["MATCH DATE"])
    print("end")

printdate(CCSSVV)
printdate(CCSSVV)
printdate(CCSSVV)
我希望输出看起来像:

start
25.05.2018
25.05.2018
25.05.2018
end
start
25.05.2018
25.05.2018
25.05.2018
end
start
25.05.2018
25.05.2018
25.05.2018
end
但事实是

start
25.05.2018
25.05.2018
25.05.2018
end
start
end
start
end

文件对象是一个行的迭代器,而不是一个行序列,一旦你迭代它,它是空的。而且,由于
csv.DictReader
只包装该文件对象,因此它也是dicts的迭代器,而不是序列。如果您想实现这一点,选项包括:(a)每次关闭并重新打开文件。(b) 调用
TEST.seek(0)
,然后重新创建
读写器。(c) 
TEST.seek(0)
,然后
next(TEST)
跳过标题行,那么现有的
DictReader
将继续工作。(d) 将dicts的整个迭代器读入内存中的一个序列,如
CCSSVV=list(CCSSVV)
,这样您就可以重复地循环它。(e) 重写你的代码,这样它就可以在一次通过而不是三次通过中完成所有操作。非常感谢你,CCSSVV=list(CCSSVV)工作得非常好,非常感谢!