我正在编写一个代码,一次取一个巨大的文本文件(几GB)N行,处理该批处理,然后移到下一行N行,直到我完成整个文件。 (我不在乎最后一批是不是完美的尺寸)。
我一直在阅读有关使用itertools islice进行此操作的信息。 我想我在那里:
from itertools import islice
N = 16
infile = open("my_very_large_text_file","r")
lines_gen = islice(infile, N)
for lines in lines_gen:
...process my lines...
麻烦的是我想处理下一批16行,但我遗漏了一些东西
可能重复使用Lazy方法在Python中读取大文件?
@ken - OP正在询问如何使用islice执行此操作,在该帖子中OP询问如何使用yield执行此操作。
可能重复如何在Python中一次读取文件N行?
islice()可用于获取迭代器的下一个n项。因此,list(islice(f, n))将返回文件f的下一个n行的列表。在循环中使用它将为您提供n行的块文件。在文件的末尾,列表可能会更短,最后调用将返回一个空列表。
from itertools import islice
with open(...) as f:
while True:
next_n_lines = list(islice(f, n))
if not next_n_lines:
break
# process next_n_lines
另一种方法是使用石斑鱼图案:
with open(...) as f:
for next_n_lines in izip_longest(*[f] * n):
# process next_n_lines
这些天我正在学习python,有一个问题,理想情况下,如果你正在阅读数据库或记录文件,你需要将记录标记为已读(需要另一列),在下一批中你将开始处理下一个未标记的记录,这是如何实现的?特别是next_n_lines = list(islice(infile, n))
@zengr:我不明白你的问题。 list(islice(infile, n))将从文件中获取下一行n行。文件知道您已阅读的内容,您可以继续阅读。
@Sven Marnach你能评论你的代码吗?谢谢!
@Sven Say,我的批处理工作每天运行一次。我有一个1M行的巨大文本文件。但是,我只想在第1天读取前1000行。工作停止了。现在,第二天:我应该从第1001行开始处理同一个文件。那么,除了将行号计数存储在其他地方之外,你如何保持这