1

次の方法で CSV ファイルに書き込む Python ロガー スクリプトを作成しています。

  1. ファイルを開く
  2. データを追加
  3. ファイルを閉じます (これは変更を保存するために必要だと思います。ログ記録のたびに安全を確保するためです。)

問題:
このファイルは、Windows エクスプローラー (私は XP を使用しています) から非常に簡単にアクセスできます。ファイルを Excel で開いた場合、そのファイルへのアクセスは Excel によってロックされます。スクリプトがデータを追加しようとすると、明らかに失敗し、完全に中止されます。

目的:
Python を使用してファイルをロックし、ファイルへのアクセスをスクリプトだけに限定する方法はありますか? それとも、そもそも私の方法論が下手なのだろうか?

4

2 に答える 2

4

アクセスごとにファイルを閉じて再度開くのではなく、バッファをフラッシュするだけです。

theloggingfile.flush()

このようにして、Python で書き込み用に開いたままにします。これにより、書き込み用に開いている他のプログラムからファイルがロックされます。Pythonで開いている間、Excelは読み取り専用として開くことができると思いますが、Windowsを再起動しないと確認できません。

編集:以下の手順は必要ないと思います。.flush()オペレーティング システムに送信する必要があり、別のプログラムでそれを見ようとすると、OS はキャッシュされたバージョンを提供する必要があります。os.fsync突然の電源障害が心配な場合などに、OS に実際にハード ドライブに書き込むように強制するために使用します。

os.fsync(theloggingfile.fileno())
于 2010-12-13T11:16:14.147 に答える
0

私の知る限り、Windows はファイルのロックをサポートしていません。つまり、ファイルがロックされていることを知らないアプリケーションは、ファイルの読み取りを防止できません。

しかし、残る問題は、Excel でこれをどのように達成できるかということです。

最初に一時ファイル (Excel が認識していないファイル) に書き込み、後で元のファイルを置き換えることをお勧めします。

于 2010-12-13T10:39:55.183 に答える