【发布时间】:2017-12-12 16:53:59
【问题描述】:
希望有人可以帮助我理解以下内容。编写一个小程序以 K 行块读取 csv 文件。我已经看到了关于这个的其他堆栈问题,这不是我在这里要问的。我试图理解为什么一个程序终止而另一个程序永远不会终止。
这段代码永远不会终止:
from __future__ import print_function
from itertools import islice
import time
import csv
def gen_csv1(input_file, chunk_size=50):
try:
with open(input_file) as in_file:
csv_reader = csv.reader(in_file)
while True:
yield islice(csv_reader, chunk_size)
except StopIteration:
pass
gen1 = gen_csv1('./test100.csv')
for chunk in gen1:
print(list(chunk))
time.sleep(1)
虽然这很好用。唯一的区别是生成器的yield 之外的islice。
def gen_csv(input_file):
try:
with open(input_file) as in_file:
csv_reader = csv.reader(in_file)
while True:
yield next(csv_reader)
except StopIteration:
pass
gen = gen_csv('./test100.csv')
for chunk in gen:
rows = islice(gen, 50)
print(list(rows))
time.sleep(1)
我被难住了。非常感谢任何指导。这更多是出于好奇,而不是出于工作原因。
【问题讨论】:
-
在stackoverflow.com/questions/1915170/… 的帮助下,我找到了一个可行的解决方案,但仍然想了解这里发生了什么。
标签: python python-2.7 generator yield