Python 带文件删除的Numpy memmap

Python 带文件删除的Numpy memmap,python,numpy,mmap,temporary-files,Python,Numpy,Mmap,Temporary Files,是否可能有一个Numpy memmap文件,当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 但对临时文件的引用似乎没有保留,因此被删除

是否可能有一个Numpy memmap文件,当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
但对临时文件的引用似乎没有保留,因此被删除

我不想在临时文件上使用上下文管理器,因为我希望能够从函数返回数组,并使文件处于活动状态,直到不再使用数组为止

注意:这里有一个类似的问题:但是提问者对Python作用域和tempfile模块知之甚少。

事实证明,最初链接的问题是正确的。因此,代码:

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\u name)
为false。文件路径(
temp_name
)已取消链接,不再可通过文件系统访问,但是,在关闭打开的文件之前,实际的文件磁盘使用情况将保持可用,memmap对象将保留该文件。

原来链接的问题是正确的。因此,代码:

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\u name)
为false。文件路径(
temp_name
)已取消链接,不再可通过文件系统访问,但是在关闭打开的文件之前,实际的文件磁盘使用情况将保持可用,memmap对象将保留该文件。

看起来
tempfile
memmap
之间存在一些棘手的交互。如果首先创建tempfile,或者我使用自己的文件名,则该文件存在于
os.path
和os文件管理器中。以您的方式创建的文件可能不存在于内存缓冲区之外。还可以尝试使用
delete=False
。看起来您在链接上的简短讨论回答了您的问题。这一切都与操作系统的交互以及
tempfile
如何创建文件有关。看起来
tempfile
memmap
之间存在一些棘手的交互。如果首先创建tempfile,或者我使用自己的文件名,则该文件存在于
os.path
和os文件管理器中。以您的方式创建的文件可能不存在于内存缓冲区之外。还可以尝试使用
delete=False
。看起来您在链接上的简短讨论回答了您的问题。这一切都与操作系统的交互以及
tempfile
如何创建文件有关。