Python文件io缓冲

时间:2017-05-17 14:41:24

标签: python file io buffer

我需要多次遍历几个文本文件的行。 目前这已经完成了多个

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

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

Python io docs:

这是一个工作片段

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声明中context manager

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 个答案:

答案 0 :(得分:0)

你正在做的事情已经是正确的方法。引用这个答案:How to read large file, line by line in python

  

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