Python 的 "append" 文件写入模式是只写入新字节,还是重写整个文件?

Does Python's "append" file write mode only write new bytes, or does it re-write the entire file as well?

虽然我认为追加模式足够“智能”以仅插入被追加的新字节,但我想绝对确保 Python 不会通过重写整个文件来处理它以及新字节。

我正在尝试保留程序日志的 运行 备份,它可能达到数千条 CSV 格式的记录。

Python 文件操作是对操作系统文件操作的便利包装。操作系统在内部实现此文件系统操作,将它们转发到可加载模块(插件)或外部服务器(NFS,SMB)。自 1971 年以来的大多数操作系统都能够将数据附加到现有文件。至少所有声称甚至远程 POSIX 合规的。

POSIX追加模式只是打开文件进行写入并将文件指针移动到文件末尾。这意味着所有写操作都将只写到文件末尾之后。

可能会有一些例外,例如,某些例程可能会使用低级系统调用来向后移动文件指针。或者底层文件系统可能不 POSIX 兼容并使用某种形式的对象事务存储,如 AWS S3。但是对于任何标准场景,我都不会担心这种情况。

但是,由于您提到备份是您的用例,因此您需要格外小心。备份并不像表面上看起来那么容易。需要担心的是,各种缓存可能会在将数据写入磁盘之前将数据保存在内存中。如果在您添加新记录后电源立即断电,将会发生什么情况。另外,如果有人启动您的程序的多个副本会怎样?

最后一件事。除非你 运行 在 1980 年代的 8 位计算机上,几千行 CSV 行对现代硬件来说毫无意义。即使文件已加载并写回,您也不会注意到任何差异