【问题标题】:Closing a file after using np.load (using Spyder)使用 np.load 后关闭文件(使用 Spyder)
【发布时间】:2014-11-21 17:31:59
【问题描述】:

我正在加载一个文件:

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 控制台。

【问题讨论】:

    标签: python file-io numpy spyder winscp


    【解决方案1】:

    尝试使用with context manager

    with np.load('myfile.npz') as a:
        do_stuff(a)
    
    do_morestuff() # a is closed now
    

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

    【讨论】:

    • 谢谢,这行得通,但我在命令行上玩弄 a 。每个命令之前所需的选项卡令人讨厌(因为我也在复制以前的命令)。
    【解决方案2】:

    我发现使用del 也可以:

    del a
    

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 2015-07-13
      • 2016-02-26
      • 2019-09-15
      • 2013-05-23
      • 1970-01-01
      相关资源
      最近更新 更多