Python的“open”函数是将内容保存在内存中还是临时文件中?

8 投票
6 回答
4531 浏览
提问于 2025-04-15 19:07

对于以下的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() 来强制执行。

撰写回答