def skip_last(iterator):
prev = next(iterator)
for item in iterator:
yield prev
prev = item
for row in skip_last(CSV_reader):
print(row)
print("Completed")
我知道该功能应该跳过使用python csv模块读入CSV阅读器的文件的最后一行。只是无法可视化流程。任何帮助将不胜感激。
让我们假设我们有一个包含以下示例数据的文本文件,并且我们想调用skip_last函数以将文件中的所有行打印到标准输出中,并删除FOOTER记录。
ABC 123
DEF 456
GHI 789
FOOTER
答案 0 :(得分:0)
第prev = next(iterator)
行读入迭代器的第一个元素。
循环for item in iterator:
逐一遍历其余项目。但是请注意,它不会产生item
。它产生prev
,比item
落后一个元素。
分配prev = item
保持滞后。完成迭代器后(通过 last 行进行迭代),您的生成器就落后了一个元素(产生了倒数第二个行)。
您可以创建一个prev
和item
的表,当yield
发生时:
prev item
-------------------
ABC 123 DEF 456
DEF 456 GHI 789
GHI 789 FOOTER
基本上,当item
到达最后一个元素FOOTER
时,迭代停止,但是到那时prev
产生了倒数第二个元素{{1} }。