Python';s";附加“;文件写入模式只写入新字节,还是重新写入整个文件?

Python';s";附加“;文件写入模式只写入新字节,还是重新写入整个文件?,python,file-access,Python,File Access,虽然我认为append模式足够“智能”,只插入被追加的新字节,但我想绝对确保Python不会通过将整个文件与新字节一起重新写入来处理它 我正在尝试保存一个程序日志的运行备份,它可以达到数千条CSV格式的记录。Python文件操作是操作系统文件操作的方便包装。操作系统在内部实现此文件系统操作,将其转发到可加载模块(插件)或外部服务器(NFS、SMB)。自1971年以来,大多数操作系统都能够将数据附加到现有文件中。至少是那些声称能够远程兼容POSIX的公司 POSIX append模式只是打开文件进

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


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

Python文件操作是操作系统文件操作的方便包装。操作系统在内部实现此文件系统操作,将其转发到可加载模块(插件)或外部服务器(NFS、SMB)。自1971年以来,大多数操作系统都能够将数据附加到现有文件中。至少是那些声称能够远程兼容POSIX的公司

POSIX append模式只是打开文件进行写入,并将文件指针移动到文件末尾。这意味着所有的写操作将只写过文件的末尾

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

然而,由于您提到备份是您的用例,所以您需要格外小心。备份不像表面上看起来那么容易。需要担心的是,如果将数据写入磁盘,可能会有各种缓存将数据保存在内存中。如果在添加新记录后电源刚好熄灭,会发生什么情况。另外,如果有人启动了你程序的多个副本,会发生什么


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

这可能取决于底层系统调用。那么假设我们谈论的是现代windows安装?实际上发生了什么我不能说,那就是深入到细节(内核和硬件)上,这些细节都高于我的工资等级。我几乎可以肯定,Python本身并不仅仅是将文件复制到内存中,截断它,然后重新编写它。我通常相信内核能够高效地完成任务。但我对这个问题的答案也很感兴趣。一个相关的问题:很好的答案!事后看来,我真的应该意识到这首先是一个POSIX行为问题。作为后续行动,您是否有任何关于备份范例的好资源可供我参考?非常感谢。