ファイルが開かれないようにします
-
09-10-2019 - |
質問
次の方法でCSVファイルに書き込むPython Loggerスクリプトを書いています。
- ファイルを開きます
- データを追加します
- ファイルを閉じます(これは、変更を保存するために必要だと思います。ロギングルーチンごとに安全であるためです。)
問題:
このファイルは、Windows Explorer(XPを使用している)から非常にアクセスできます。ファイルがExcelで開かれている場合、アクセスはExcelによってロックされます。スクリプトがデータを追加しようとすると、明らかに失敗し、完全に中止します。
目的:
Pythonを使用してファイルをロックして、スクリプト専用のままであるようにファイルをロックする方法はありますか?それとも、そもそも私の方法論は貧弱ですか?
解決
各アクセス後にファイルを閉じて再開するのではなく、バッファをフラッシュするだけです。
theloggingfile.flush()
このようにして、Pythonで書くためにそれを開いたままにします。これにより、他のプログラムからファイルをロックして、執筆のために開きます。私 考える Excelは、Pythonで開いている間に読み取り専用として開くことができますが、Windowsに再起動せずにそれを確認することはできません。
編集: 以下のステップは必要ないと思います。 .flush()
オペレーティングシステムに送信する必要があり、別のプログラムで見ようとする場合、OSはキャッシュバージョンを提供する必要があります。使用する os.fsync
突然の電力障害を心配している場合、OSに実際にハードドライブに書き込むように強制します。
os.fsync(theloggingfile.fileno())
他のヒント
私の知る限り、Windowsはファイルロックをサポートしていません。言い換えれば、ファイルがロックされていることを知らないアプリケーションは、ファイルの読み取りを防ぐことはできません。
しかし、残りの質問は、Excelがこれをどのように達成できるかということです。
最初に一時ファイルに書き込み、後で元のファイルを置き換えることを試みることができます。