Python 文件 io 缓冲



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

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

虽然性能还不是问题,但我想只将文件读取一次到io.StringIO缓冲区中,然后使用它。

Pythoniodocs:

  • https://docs.python.org/3/library/io.html
    • https://docs.python.org/3/library/io.html#io.IOBase
      • https://docs.python.org/3/library/io.html#io.TextIOBase
        • https://docs.python.org/3/library/io.html#io.StringIO

这是一个工作片段

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 通过自动缓冲优化多个文件访问的内容)?

你正在做的事情已经是正确的方式了。引用这个答案:如何在python中逐行读取大文件

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

最新更新