You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用itertools实现可迭代对象(如文件)的固定大小分组迭代?

按固定行数迭代可迭代对象(无需全量加载)

你可以借助itertools.islice实现这个需求,不用把全部内容读入内存。下面是对应的实现函数:

from itertools import islice

def ten_at_a_time_magic(iterable, chunk_size):
    iterator = iter(iterable)
    while True:
        # 每次从迭代器中取出最多chunk_size个元素
        chunk = list(islice(iterator, chunk_size))
        if not chunk:
            # 取不出元素时终止循环
            break
        yield chunk

直接用你给出的场景测试:

with open("filename.txt") as source:
    for tenlinegroup in ten_at_a_time_magic(source, 10):
        # 示例:打印每组10行
        print(''.join(tenlinegroup))

原理说明

  • 文件对象本身就是迭代器,我们先把输入的可迭代对象统一转为迭代器,确保兼容所有可迭代类型;
  • islice会从迭代器中按指定数量取元素,且不会提前加载全部内容;
  • 每次取出的元素转成列表(如果不需要保存,也可以直接处理islice返回的迭代器),当chunk为空时,说明原迭代器已经耗尽,停止生成。

如果追求更简洁的写法,也可以结合itertools.takewhile:

from itertools import islice, takewhile

def ten_at_a_time_magic(iterable, chunk_size):
    iterator = iter(iterable)
    return takewhile(bool, (list(islice(iterator, chunk_size)) for _ in iter(int, 1)))

内容的提问来源于stack exchange,提问作者alexis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:30:52