虽然我认为追加模式足够“智能”,只插入要追加的新字节,但我想绝对确保Python不会通过重写整个文件和新字节来处理它。
我正在尝试保留程序日志的运行备份,它可能会达到 CSV 格式的数千条记录。
最佳答案
Python 文件操作是操作系统文件操作的便捷包装。操作系统要么在内部实现此文件系统操作,要么将它们转发到可加载模块(插件)或外部服务器(NFS、SMB)。自 1971 年以来的大多数操作系统都能够将数据附加到现有文件中。至少所有那些声称完全符合 POSIX 标准的。
POSIX追加模式只是打开文件进行写入,并将文件指针移动到文件末尾。这意味着所有写入操作都只会写入到文件末尾之后。
可能有一些异常(exception),例如某些例程可能使用低级系统调用来向后移动文件指针。或者底层文件系统可能不符合 POSIX 标准并使用某种形式的对象事务存储(例如 AWS S3)。但对于任何标准场景,我都不会担心这种情况。
但是,既然您提到备份作为您的用例,您就需要格外小心。备份并不像表面上看起来那么容易。需要担心的是,在将数据写入磁盘之前,各种缓存可能会将数据保存在内存中。如果在添加新记录后立即断电,会发生什么情况。另外,如果有人启动您的程序的多个副本,会发生什么情况?
最后一件事。除非您在 20 世纪 80 年代的 8 位计算机上运行,否则几千行 CSV 对于现代硬件来说根本不算什么。即使文件被加载并写回,您也不会注意到任何差异
关于python - Python的 "append"文件写入模式只写入新字节,还是也重写整个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65067610/