Pythonの「追加」ファイル書き込みモードは新しいバイトのみを書き込むのですか、それともファイル全体を再書き込みするのですか?

Nov 29 2020

追加モードは、追加される新しいバイトを挿入するだけの「スマート」だと思いますが、ファイル全体を新しいバイトと一緒に書き直すことで、Pythonがそれを処理しないようにしたいのです。

プログラムログの実行中のバックアップを保持しようとしていますが、CSV形式で数千のレコードに達する可能性があります。

回答

2 Vlad Nov 30 2020 at 03:31

Pythonファイル操作は、オペレーティングシステムのファイル操作の便利なラッパーです。オペレーティングシステムは、このファイルシステム操作を内部で実装し、それらをロード可能なモジュール(プラグイン)または外部サーバー(NFS、SMB)に転送します。1971年以降のほとんどのオペレーティングシステムは、既存のファイルへのデータの追加を実行できます。少なくとも、リモートでPOSIXに準拠していると主張するものすべて。

POSIX追加モードは、書き込み用にファイルを開き、ファイルポインタをファイルの末尾に移動するだけです。これは、すべての書き込み操作がファイルの終わりを超えて書き込むことを意味します。

これにはいくつかの例外がある場合があります。たとえば、一部のルーチンは低レベルのシステムコールを使用して、ファイルポインタを後方に移動する場合があります。または、基盤となるファイルシステムがPOSIXに準拠しておらず、AWSS3などの何らかの形式のオブジェクトトランザクションストレージを使用している可能性があります。しかし、標準的なシナリオでは、そのような場合については心配しません。

ただし、ユースケースとしてバックアップについて言及したため、特に注意する必要があります。バックアップは、表面的に見えるほど簡単ではありません。心配することは、データがディスクに書き込まれる前にメモリにデータを保持する可能性のあるさまざまなキャッシュです。新しいレコードを追加した直後に電源が切れるとどうなりますか。また、誰かがあなたのプログラムのいくつかのコピーを開始した場合はどうなりますか?

そして最後に。1980年代の8ビットコンピュータで実行していない限り、数千のCSV行は最新のハードウェアには何の影響もありません。ファイルがロードされて書き戻されても、違いはわかりません。