2017-06-22 22 views
1

memmap配列がガベージコレクションされたときにファイルが削除されるNumpy memmapファイルを持つことは可能ですか?ファイルの削除を伴うNumpy memmap

import tempfile 
import numpy as np 
arr = np.memmap(tempfile.NamedTemporaryFile(), mode='w+', 
       shape=(10, 10), dtype=np.int) 
os.path.exists(arr.filename) # False 

をしかし、削除されますので、保管されていない一時ファイルへの参照を表示されます。

私が試してみました。

私は関数から配列を返すことができ、配列がもはや使用されなくなるまでファイルを生きたいと思っているので、一時ファイルに対してコンテキストマネージャを使いたくありません。

NB:同様の質問はIn Python, is it possible to overload Numpy's memmap to delete itself when the memmap object is no longer referenced?ですが、質問者はPythonスコープとtempfileモジュールに関する知識がありません。

+0

'tempfile'と' memmap'の間にはややこしい相互作用があるようです。一時ファイルが最初に作成された場合、または私自身のファイル名を使用する場合、ファイルは 'os.path'とOSファイルマネージャの両方に存在します。メモリバッファの外部にファイルが存在しないように作成しました。 'delete = False'でも試してみてください。 – hpaulj

+1

リンクされたSOのあなたの簡単なディスカッションのように思えます。オペレーティングシステムのやりとりと、 'tempfile'がどのようにファイルを作成するのかは、すべてが結びついています。 – hpaulj

答えて

0

このように、当初リンクされていた質問にjtaylor's answerが正しく表示されます。だから、コード:os.path.exists(temp_name)が原因でOSがファイルを管理する方法のため、偽であっても

import tempfile 
import numpy as np 
with tempfile.NamedTemporaryFile() as ntf: 
    temp_name = ntf.name 
    arr = np.memmap(ntf, mode='w+', 
        shape=(10, 10), dtype=np.int) 
print(arr) 

作品、必要に応じて、。ファイルパス(temp_name)はリンクが解除され、ファイルシステムからアクセスできなくなりますが、実際のファイルディスク使用量は、開いているファイルが閉じられるまで有効です。

関連する問題