对于csv reader_Python中的循环位置

时间:2013-11-27 04:16:23

标签: python csv for-loop

在我的脚本中计算max_conc时,下一个for循环不起作用,除非我把它放在读者之后。但这样做,max_conc不再起作用了。

with open ('outfile.csv', 'r') as infile:
    reader = csv.reader(infile)

    max_conc = max(cols[1] for cols in reader)
    print max_conc

    for row in reader:
    print row

重新打开输入文件是唯一的解决方案吗?

1 个答案:

答案 0 :(得分:2)

因为你打电话的时候:

max(cols[1] for cols in reader)

你耗尽了迭代器,你无法再次遍历它。但您可以使用seek返回文件的开头:

infile.seek(0)

或者,您可以将文件的副本存储在内存中:

lines = infile.readlines()
max_conc = max(cols[1] for cols in lines)

另一种方式,正如@Lyncha建议的那样,循环遍历文件的列表副本:

lines = list(reader)

这是一个小例子:

>>> f = open('test.txt')
>>> f.read()
'a\nb\nc\nd\ne\nf\ng'
>>> f.read()
''  #whoops, iterator is exhausted
>>> f.seek(0)
>>> f.read()
'a\nb\nc\nd\ne\nf\ng'