Python的“open”函数是将内容保存在内存中还是临时文件中?
对于以下的Python代码:
fp = open('output.txt', 'wb')
# Very big file, writes a lot of lines, n is a very large number
for i in range(1, n):
fp.write('something' * n)
fp.close()
上面的写入过程可能会持续超过30分钟。有时候我会遇到一个错误,叫做MemoryError
。在关闭文件之前,文件的内容是存储在内存中,还是写入了一个临时文件呢?如果是临时文件,它在Linux操作系统上的一般位置在哪里?
编辑:
在一个循环中添加了fp.write
6 个回答
3
在Linux内核中,会有写入缓冲区的存在,但这些缓冲区会在一定的时间间隔内被清空到硬盘上。如果缓冲区空间用完了,应该不会导致应用程序出现内存错误;在这种情况下,缓冲区会先被清空,然后应用程序会暂停一下,等缓冲区有了空间再继续运行。
3
在ataylor对这个问题的评论基础上:
你可能想要把你的循环嵌套起来。可以像这样做:
for i in range(1,n):
for each in range n:
fp.write('something')
fp.close()
这样的话,只有字符串 "something"
会被放到内存里,而不是 "something" * n
。
5
它会先存储在操作系统的内存缓存里,直到被写入硬盘。这种写入可以是自动发生的,比如因为时间到了或者内存空间不够了,也可以是通过手动命令 fp.flush()
来强制执行。