首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >enumerate()是否维护缓冲文件读取?

enumerate()是否维护缓冲文件读取?
EN

Stack Overflow用户
提问于 2021-10-11 11:33:54
回答 1查看 31关注 0票数 0

我需要使用一个索引来记住我在文件中的行数,以便在程序中断时恢复操作。到目前为止,我一直在使用这个:

代码语言:javascript
复制
checkpoint = 15

with open('file.dat', 'rb') as file:
    it = iter(file)
    
    for _ in range(checkpoint):
        next(it)
    
    try:
        while True:
            line = next(it)
            # do some stuff
            checkpoint += 1
    except StopIteration:
        print("EOF")

但这让人感觉笨拙和低效。我一直在想,应用于文件的枚举(或迭代器)是否会维护缓冲读取属性,从而使文件不会一次全部加载到内存中。我现在还为文件中的位置保留了一个行索引。我一直在想这样的事情:

代码语言:javascript
复制
file_offset = 589

with open('file.dat', 'rb') as file:
    file.seek(file.offset)  # beginning of unprocessed line

    for idx, line in enumerate(file):
        file_offset = file.tell()
        # do stuff

这是一种有效的方法,可以在这里正确枚举工作,而不需要将整个工作加载到内存中吗?

EN

回答 1

Stack Overflow用户

发布于 2021-10-11 12:17:54

正如Memory-efficent way to iterate over part of a large file中所指出的,基于所提供的答案,enumerate()创建了一个生成器,以便保持对文件的缓冲读取。

这意味着for i, line in enumerate(file)将产生所需的结果,而无需将整个文件加载到内存中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69525533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档