我正在尝试通过阅读文档来自学Python。我正在尝试理解刷新文件缓冲区意味着什么。根据文档,"file.flush“执行以下操作。
Flush the internal buffer, like stdio‘s fflush().
This may be a no-op on some file-like objects.
我不知道“内部缓冲区”和“无操作”是什么意思,但我认为它说明flush
将数据从某个缓冲区写入文件。
因此,我运行此文件切换中间行中的井号。
with open("myFile.txt", "w+") as file:
file.write("foo")
file.write("bar")
# file.flush()
file.write("baz")
file.write("quux")
但是,在调用和不调用file.flush()
的情况下,我似乎得到了相同的myFile.txt
。file.flush()
有什么作用?
发布于 2012-05-11 11:57:02
Python缓冲对文件的写入。也就是说,file.write
会在数据实际写入硬盘之前返回。这样做的主要动机是,一些大型写入比许多小型写入要快得多,因此通过保存file.write
的输出,直到积累了一点,Python可以保持良好的写入速度。
file.flush
会强制在此时将数据写出。当您知道可能需要一段时间才能写出更多数据,但又希望其他进程能够查看您已经写入的数据时,就可以使用这种方法。想象一下一个增长缓慢的日志文件。您不希望在建立足够多的条目之前必须等待很长时间才能将数据写出为一个大块。
在任何一种情况下,file.close
都会导致剩余数据被刷新,因此一旦file
(这是一个非常糟糕的名称,因为它隐藏在内置的file
构造函数中)落在with
上下文管理器的范围之外并被关闭,代码中的"quux“就会被写出来。
注意:你的操作系统会做一些自己的缓冲,但我相信每一个运行Python的操作系统都会响应file.flush
的请求,把数据写到驱动器上。如果我说错了,请有人纠正我。
顺便说一句,"no-op“意味着"no operation",因为它实际上不会做任何事情。例如,StringIO对象操作内存中的字符串,而不是硬盘上的文件。StringIO.flush
可能会立即返回,因为它实际上没有什么可做的。
发布于 2012-05-11 11:52:21
可以缓存缓冲区内容以提高性能。刷新可确保内容完全写入磁盘,从而避免数据丢失。例如,当您希望在下一次文件操作发生之前将请求用户输入的行完全打印在屏幕上时,它也很有用。
https://stackoverflow.com/questions/10545167
复制相似问题