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

时间:2014-09-26 16:22:23

标签: python file-io numpy spyder winscp

我正在加载文件:

a= np.load('myfile.npz')

然后使用a

进行操作

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

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

System Error.  Code: 32.
The process cannot access the file because it is being used by another process.

我试过这个:

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

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

如果我关闭python解释器,副本就会成功。

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

我在Win7上的Spyder IDE中使用了python控制台。

2 个答案:

答案 0 :(得分:6)

尝试使用with context manager

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

do_morestuff() # a is closed now

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

答案 1 :(得分:2)

我发现使用del也有效:

del a