使用np.load后关闭文件(使用Spyder)

ato*_*3ls 2 python file-io numpy winscp spyder

我正在加载一个文件:

a= np.load('myfile.npz')
Run Code Online (Sandbox Code Playgroud)

然后做事 a

过了一会儿,我重新生成myfile.npz(在远程机器上).

当我尝试从远程计算机复制文件(使用WinSCP)时,它失败,报告:

System Error.  Code: 32.
The process cannot access the file because it is being used by another process.
Run Code Online (Sandbox Code Playgroud)

我试过这个:

>>> a.fid
<open file 'myfile.npz', mode 'rb' at 0x058A78B8>
>>> a.fid.close()
>>> a.fid
<closed file 'myfile.npz', mode 'rb' at 0x058A78B8>
Run Code Online (Sandbox Code Playgroud)

但是,文件复制仍然失败.

如果我关闭python解释器,副本成功.

造成这个问题的原因是什么?我需要先关闭myfile.npz(我以为这是自动处理的)吗?如果是这样,我该怎么办?

我在Win7上的Spyder IDE中使用了一个python控制台.

Mat*_*DMo 9

尝试使用with上下文管理器:

with np.load('myfile.npz') as a:
    do_stuff(a)

do_morestuff() # a is closed now
Run Code Online (Sandbox Code Playgroud)

完成后,上下文管理器会自动关闭资源.