我正在尝试通过阅读文档自学 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()
有什么作用?
最佳答案
Python 缓冲写入文件。也就是说,file.write
在数据实际写入您的硬盘之前返回。这样做的主要动机是一些大的写入比许多小的写入快得多,所以通过保存 file.write
的输出直到积累一点,Python 可以保持良好的写入速度。
file.flush
强制数据在那一刻被写出。当您知道可能需要一段时间才能写出更多数据,但您希望其他进程能够查看您已经写入的数据时,这就是手。想象一个增长缓慢的日志文件。您不希望在建立足够的条目之前必须等待很长时间才能将数据写成一大块。
在任何一种情况下,file.close
都会导致剩余数据被刷新,因此代码中的“quux”将在file
(这是一个非常糟糕的名字,因为它隐藏了内置的 file
构造函数)超出了 with
上下文管理器的范围并被关闭。
注意:您的操作系统会自己做一些缓冲,但我相信每个实现 Python 的操作系统都会尊重 file.flush
将数据写出到驱动器的请求。如果我错了,请有人纠正我。
顺便说一句,“no-op”的意思是“没有操作”,因为它实际上不会做任何事情。例如,StringIO 对象操作内存中的字符串,而不是硬盘上的文件。 StringIO.flush
可能会立即返回,因为它实际上没有什么可做的。
关于python - 在 Python 中刷新文件内容是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10545167/