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

标签 python

我正在尝试通过阅读文档自学 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.txtfile.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/

相关文章:

python - Geektool 不适用于 python3

python - Python 中的静态链接和动态链接分别是什么意思?

python - 如何将3d数组转换为数据框,以使第三维成为该数据框的列表项

python - 是否可以在 Python 中读取 Fortran 格式的数据?

python - 在 python 中使用 pickle 和 for 循环从文件中读取

python - 将 Pandas Dataframe 列转换为 R 因子

python - 将列表解析为另一个函数参数 - Python

python - 使用 FFT 计算滤波器 (b,a,x,zi)

python - Pyserial 缓冲区填充速度快于我的阅读速度

Python字符串 'in'算子实现算法和时间复杂度