2017-06-21 1 views
1

私はPythonパッケージcdoを使用しています。これは、中間結果を格納するために大きくtempfileに依存しています。作成されたテンポラリファイルはかなり大きく、大きな計算を実行すると、/tmpディレクトリがいっぱいになり、スクリプトが失敗したdisk fullエラー(私たちは10〜100sのGBについて話している)に遭遇しました。私はローカルフォルダを作成することで、問題の回避策を見つけた、$HOME/tmpを言うし、その後cdoモジュールをインポートする前にスクリプト評価中に一時ファイルを削除する

import tempfile 
tempfile.tempdir='$HOME/tmp' 

を行います。これは私にとっては効果的ですが、他の人にもスクリプトを使用してもらいたい場合は、やや面倒です。したがって、たとえば、tmpfileに定期的にすべてのテンポラリファイルをクリアするように伝えるなど、問題を解決するより洗練された方法があるかどうか、私は疑問を抱いていました(通常これはスクリプトが終了した時点でのみ行われます)。私の側からは、これは可能です。長いループを実行しているため、それぞれの反復ごとに1つの名前付きファイルが作成され、その反復中に作成されたすべての一時ファイルはその後破棄されます。 examplesショーとして

+0

https://stackoverflow.com/questions/21257782/how-to-remove-file-when-program-exitsで説明されているtempfileモジュールを使用するだけです。ファイルが閉じられると、一時ファイルが自動的に削除されます。 – MeterLongCat

+0

@MeterLongCat質問に書かれているように、cdoは 'tempfile'を使います。スクリプトが終了する前に*を削除する必要があります。残念ながら、私はcdoが作成時に 'TemporaryFile()'インスタンスに渡すパラメータを制御できません。 –

答えて

2

:コンテキストが終了したときにそれらが削除され

with tempfile.TemporaryFile() as fp: 
    fp.write(b'Hello world!') 
    fp.seek(0) 
    fp.read() 

その方法:あなたはコンテキストマネージャでtempfileを使用することができます。

... cdoが一時ファイルをどのように使用するのか、その多くの制御がありますか?

+0

残念ながら私はそのコントロールを持っていませんが、例はとにかく良いです。 –

+0

...ごめんなさい! –

関連する問題