棚にPythonの一時ファイルを使用する(そして、それは自分自身をクリーンアップすることを確認してください)する簡単な方法はありますか?

StackOverflow https://stackoverflow.com/questions/1298037

  •  18-09-2019
  •  | 
  •  

質問

基本的に、私は無限の大きさ(より正確には、ハードドライブではなく、メモリバインド)私が書いているPythonプログラムで辞書が欲しいです。これは、モジュールが自然にこのために適している、しかし、私は安全な方法でそれらを一緒に使用する方法を見ることができない一時ファイルのように思えるし、棚上げ。開くために)私は棚がGCedあるとき(または保証の削除で棚に関係なくときの、使用になった後)一時ファイルを削除することにしたいが、私はこのために考え出すことができる唯一の解決策は、(tempfile.TemporaryFileを使用することを含みますファイルハンドル、棚を開けGCed(およびファイル削除)を得ることから、それを防ぐために、ファイルハンドルへの参照を維持して、これを格納棚の上にラッパーを置くため、このファイル名を使用して、ハンドルからファイル名を取得参照。誰もがこの複雑な混乱よりもよりよい解決策がありますか?

制限:。唯一の標準Pythonライブラリを使用することができますし、完全にクロスプラットフォームである必要があります。

役に立ちましたか?

解決

私はむしろshelve.Shelfから継承し、ファイルのリンクを解除するためにcloseメソッド(*)をオーバーライドします。使用されている特定のdbmモジュールに応じて、あなたは棚が含まれている複数のファイルを持っている可能性があることに注意してください。一つの解決策ではなく、一時的なファイルよりも、一時ディレクトリを作成し、完了時のディレクトリに何かを削除することができます。他のソリューションには、特定のdbmモジュール(たとえば、はbsddb、またはdumbdbm)に結合し、そしてこれらのライブラリが作成、特にそれらのファイルを削除することです。

棚がガベージコレクトとき棚のクローズ方法も呼ばれること

(*)通知。インタプリタがクラッシュしたり殺されたときにゴミファイルで終わる可能性がどのように唯一のケースです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top