为什么文件的内容只有在关闭后才写入?

Ele*_*iou 0 python file-io file python-3.x

我注意到,在Python中写入文件时,一旦文件关闭,内容就会写入文件中。

例如:

with open('test.txt','w') as ffile:
    ffile.write("testing")
    time.sleep(20)
Run Code Online (Sandbox Code Playgroud)

在此示例中“等待 20 秒后将写入“ testing ”。

这是如何以及为何发生的?为什么不同时写入文件呢?

Mar*_*ers 5

您正在看到的效果您正在看到缓冲。磁盘 I/O 使用缓冲区来提高性能,但您尚未向缓冲区写入足够的数据以供其刷新。

写入更多数据,或关闭文件,都会导致缓冲区被刷新。或者,将缓冲区大小设置为一个非常小的数字(缓冲区将保存的字节数):

with open('test.txt', 'w', 2) as ffile:
Run Code Online (Sandbox Code Playgroud)

选项01有特殊含义;0将完全禁用缓冲(仅适用于二进制模式文件)并且1 is the default for text files (using line buffering, write a newline to flush).

这也意味着如果您有一个文本文件,您可以编写换行符来触发刷新:

ffile.write('\n')
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的一点是,您可以使用以下file.flush()方法显式刷新:

ffile.flush()
Run Code Online (Sandbox Code Playgroud)