在Python中刷新文件内容是什么意思?

时间:2012-05-11 03:46:51

标签: python

我试图通过阅读文档来教自己Python。我试图理解刷新文件缓冲区的含义。根据文档," file.flush"做以下事情。

Flush the internal buffer, like stdio‘s fflush().
This may be a no-op on some file-like objects.

我不知道"内部缓冲区"和" no-op"意思是,但我认为它说flush将数据从某个缓冲区写入文件。

因此,我运行此文件在中间的行中切换英镑符号。

with open("myFile.txt", "w+") as file:
    file.write("foo")
    file.write("bar")
    # file.flush()
    file.write("baz")
    file.write("quux")

但是,无论有没有调用myFile.txt,我似乎都会得到相同的file.flush()file.flush()有什么影响?

2 个答案:

答案 0 :(得分:9)

Python缓冲写入文件。也就是说,file.write在数据实际写入硬盘之前返回。这样做的主要动机是,一些大写操作比许多微写操作快得多,因此通过保存file.write的输出直到有点累积,Python可以保持良好的写入速度。

file.flush强制在那一刻写出数据。如果您知道可能需要一段时间才能写出更多数据,但是您希望其他进程能够查看您已编写的数据。想象一下缓慢增长的日志文件。您不希望在足够的条目构建之前等待很长时间才能将数据写入一个大块。

在任何一种情况下,file.close都会导致剩余的数据被刷新,因此代码中的“quux”将在file后立即写出(这是一个非常糟糕的名称,因为它会影响builtin file构造函数)超出with上下文管理器的范围并被关闭。

注意:您的操作系统会自行缓存,但我相信每个实现Python的操作系统都会尊重file.flush将数据写入驱动器的请求。如果我错了,请有人纠正我。

顺便说一句,“no-op”意味着“没有操作”,因为它实际上不会做任何事情。例如,StringIO对象操纵内存中的字符串,而不是硬盘驱动器上的文件。 StringIO.flush可能只是立即返回,因为没有任何事情要做。

答案 1 :(得分:3)

缓存内容可能会被缓存以提高性能。 Flush确保将内容完全写入磁盘,避免数据丢失。例如,当您想要在下一个文件操作发生之前完全在屏幕上打印请求用户输入的行时,它也很有用。