Numpy memmap删除文件

时间:2017-06-22 05:42:49

标签: python numpy mmap temporary-files

当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模块的了解很少。

1 个答案:

答案 0 :(得分:0)

事实证明,jtaylor's answer对原始链接的问题是正确的。所以代码:

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)

由于操作系统管理文件的方式,即使os.path.exists(temp_name)为false,也可以按需运行。文件路径(temp_name)已取消链接,不再可通过文件系统访问,但实际文件磁盘使用率将保持可用,直到打开文件关闭,memmap对象将保留该文件。