【问题标题】:For loop position in csv reader_Pythoncsv reader_Python中的for循环位置
【发布时间】:2013-12-12 13:58:57
【问题描述】:

在我的这段脚本中,当计算 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

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

【问题讨论】:

  • 尝试添加rows = list(reader),然后使用rows而不是reader

标签: python csv for-loop


【解决方案1】:

因为当你打电话时:

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'

【讨论】:

  • 非常感谢。就在添加 lines = infile.readlines() 时,我应该从那时起使用 lines 而不是 reader。对吗?
  • 请您编辑答案以反映它。这不起作用:lines = infile.readlines() max_conc = max(cols[1] for cols in reader)
  • for cols in reader 更改为for cols in line.split(',') for line in lines。您需要用逗号分隔它,对吗?
  • 一种更简单的方法是将其复制并存储在列表中; list(reader).
  • 只需将其更改为线条即可。不知道读卡器是一次性用品! :) 谢谢
猜你喜欢
  • 2013-08-28
  • 2021-09-23
  • 1970-01-01
  • 2016-09-30
  • 2014-10-15
  • 2021-03-04
  • 1970-01-01
  • 2012-09-24
  • 2021-02-28
相关资源
最近更新 更多