Закрытие файла после использования np.load(с помощью Spyder)

Я загружаю файл:

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 (я думал, что это было обработано автоматически)? Если да, то как это сделать?

Я использую консоль python с IDE Spyder на Win7.

Ответ 1

Я обнаружил, что использование del также работает:

del a

Ответ 2

Попробуйте использовать with контекстный менеджер:

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

do_morestuff() # a is closed now

Контекстные менеджеры автоматически заботятся о закрытии ресурса, как только вы закончите с ним.