Python如何一次读取N行数
|
我正在编写代码,一次获取一个巨大的文本文件(几个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行,但是我缺少一些东西
没有找到相关结果
已邀请:
6 个回复
翰冒绢县
可用于获取迭代器的下一个
项。因此,
将返回文件
的后ѭ2the行的列表。在循环中使用它会以
行的块的形式为您提供文件。在文件末尾,列表可能会更短,最后调用将返回一个空列表。
一种替代方法是使用石斑鱼模式:
癸痊醒
库上增加了缓冲的应用程序层,增加了复杂性,并且可能根本没有给您带来任何好处。 从而:
在时间,空间,复杂性和可读性方面可能优于任何替代方法。 另请参阅Rob Pike的前两个规则,Jackson的两个规则和PEP-20 The Zen of Python。如果您真的只想和
玩,那您应该省略大文件了。
凄挡
怎么运行的: 基本上,groupby()将根据key参数的返回值对行进行分组,并且key参数是lambda函数
,并且使用以下事实:当函数定义时,c参数将绑定到count(),因此每次
将调用lambda函数并评估返回值以确定将行分组的分组器,因此:
徘廷
我在包含1.7GB磁盘的300万行的模拟数据文件上进行了测试。在我不太热的桌面上,.17占主导地位的运行时大约需要20秒。 为了检查
的性能,我使用了used19ѭ模块
对于
的各种值;当
为100时,一个
在460µs内完成,并线性扩展至10k样本,每次调用时间为47ms。 自然而然的下一个问题是“随机”根本不是随机的吗?答案是“亚密码学,但对于生物信息学当然很好”。
黎喊病
篮肥炼皖