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

标签 python file-access

虽然我认为追加模式足够“智能”,只插入要追加的新字节,但我想绝对确保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/

相关文章:

python - def 结束时变量重置

python - 如何生成已知月份的天数列表

c# - 以编程方式使用 FolderPicker

c - 如何阻止同一进程中的其他函数访问文件?

css - 无法在 Chrome 开发者工具中保存 style.css

windows - 记事本打败了所有人?

java - 通过java applet直接访问文件

python - 将矩阵的每个元素作为一个 block 重复到新矩阵中

python - 使用 Django/Python 为 Facebook 应用程序创建一个 Like-Gate(显示选项卡)

python - 如何像数组一样处理 tf.decode_csv() 中的张量。