python - 以 4 为一组从巨大的文本文件中读取行

标签 python text-processing readline text-files

我几天前就遇到了 python 问题。我是一名没有基本编程技能的生物信息学专家,我正在处理我必须处理的巨大文本文件(大约 25gb)。

我必须每次以 4 行为一组逐行读取 txt 文件,这意味着必须读取和处理前 4 行,然后我必须读取第二组 4 行,依此类推上。

显然我不能使用 readlines() 运算符,因为它会使我的内存过载,而且我必须使用 4 行中的每一行来进行一些字符串识别。

我考虑过使用 for 循环和 range 运算符:

openfile = open(path, 'r')

for elem in range(0, len(openfile), 4):

line1 = readline()
line2 = readline()
line3 = readline()
line4 = readline()
(process lines...)

不幸的是,这是不可能的,因为处于“阅读”模式的文件不能像列表或字典一样被迭代和处理。

有人可以帮助正确循环吗?

提前致谢

最佳答案

这具有低内存开销。它依赖于文件是按行读取的迭代器这一事实。

def grouped(iterator, size):
    yield tuple(next(iterator) for _ in range(size))

像这样使用它:

for line1, line2, line3, line4 in grouped(your_open_file, size=4):
    do_stuff_with_lines()

注意:此代码假定文件不以部分组结尾。

关于python - 以 4 为一组从巨大的文本文件中读取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9707902/

相关文章:

linux - 巨大文本文件的处理行

c++ - 为 x86 系统编译 Readline(静态模式)

python - 从 Django 表单实例中检索变量

linux - 如何在多个文件上使用 awk?

python - 使用 Python 拆分字符串时遇到问题

VB.net 在字符串中搜索术语?

javascript - NodeJS readline 有时会打印回第一个输入行(但并非总是如此,似乎是随机的)

python:Windows终端中的unicode,使用的编码?

python - 你如何复制 virtualenv?

python - 禁用输出缓冲