Python文件IO缓冲

3

我需要对几个文本文件的行进行多次迭代。 目前这是使用多个

with open("file.txt") as f: 
    for line in f:
        # do something

虽然性能目前还不是问题,但我希望只将文件一次性读入到io.StringIO缓冲区中,然后再进行操作。
Python io文档: 这是一个可行的代码片段。
import io
sio = io.StringIO( open("file.txt").read() )
for line in sio:
    print(line)
sio.seek(0)
for line in sio:
    print(line)
sio.close()

或者使用with语句来包装它,使用上下文管理器

import io
with io.StringIO( open("file.txt").read() ) as sio:
    for line in sio:
        print(line)
    sio.seek(0)
    for line in sio:
        print(line)
    #sio.close()

问题

  1. 这是一种“好”的做法吗?有哪些替代方案?
  2. 使用文件对象读取文件后会发生什么(这种方式没有办法显式地close()它)?
  3. 我在哪里可以阅读更多关于Python的io缓冲的信息(我认为我读到过Python通过自动缓冲来优化多个文件访问的内容)?
1个回答

1

你所做的已经是正确的方法。引用自这个答案:如何在Python中逐行读取大文件

with语句处理打开和关闭文件,包括内部块中出现异常的情况。for line in f将文件对象f视为可迭代对象,自动使用缓冲IO和内存管理,因此您不必担心大文件。


是的,但我的问题是关于多次处理文件。它应该被多次打开(open())吗?此外,没有关于缓冲的参考资料。 - handle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接