我需要迭代几个文本文件的行几次。 这目前是用多个完成的
with open("file.txt") as f:
for line in f:
# do something
虽然性能还不是问题,但我想只将文件读取一次到io.StringIO
缓冲区中,然后使用它。
Pythonio
docs:
- 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
- https://docs.python.org/3/library/io.html#io.TextIOBase
- https://docs.python.org/3/library/io.html#io.IOBase
这是一个工作片段
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()
问题
- 这是一种"好"的方法吗,有什么替代方案?
- 用于读取文件的文件对象会发生什么情况(无法以这种方式显式
close()
)? - 我在哪里可以阅读有关 Python 的 io 缓冲的更多信息(我想我读过一些关于 Python 通过自动缓冲优化多个文件访问的内容)?
你正在做的事情已经是正确的方式了。引用这个答案:如何在python中逐行读取大文件
with
语句处理文件的打开和关闭,包括在内部块中引发异常时。for line in f
将文件对象f
视为可迭代对象,它会自动使用缓冲 IO 和内存管理,因此您不必担心大文件。