传统上,在python中一个用户with
打开文件,这样当您退出内部作用域时,文件会自动关闭。
with open('file.pickle', 'rb') as f:
data = pickle.load(f)
在numpy文档中显示了np.load
和with load
with load('foo.npz') as data:
a = data['a']
a = np.load('/tmp/123.npy')
看起来with
方法只适用于.npz文件。做a=np.load()
时自动关闭数据文件就像with
上下文是关闭?
使用我当前工作目录中的随机文件:
使用with
和npz
:
In [51]: with np.load('f.npz') as f:print(f['b'])
['q' 'r' 's']
使用"普通"负载npy
:
In [55]: a = np.load('adict.npy',allow_pickle=True)
In [56]: a
Out[56]:
array({'#Ineligiblevets': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'test': 'one'},
dtype=object)
a
是一个数组,所以不能"关闭":
In [57]: a.close()
Traceback (most recent call last):
File "<ipython-input-57-3980b52f6377>", line 1, in <module>
a.close()
AttributeError: 'numpy.ndarray' object has no attribute 'close'
这是可能的open
之前的文件,并通过with
传递,但你必须得到正确的模式,所以它真的没有帮助(除非你正在做一些特别的):
In [59]: with open('adict.npy', 'rb') as f:
...: a = np.load(f, allow_pickle=True)
...:
In [60]: a
Out[60]:
array({'#Ineligiblevets': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'test': 'one'},
dtype=object)
试图在with
中使用npy
加载不起作用,因为array
不需要enter/exit
方法:
In [61]: with np.load('adict.npy', allow_pickle=True) as data: a=data
Traceback (most recent call last):
File "<ipython-input-61-1025c4c8c4a8>", line 1, in <module>
with np.load('adict.npy', allow_pickle=True) as data: a=data
AttributeError: __enter__
否,a=np.load()
不会自动关闭文件。您可以使用a.close()
关闭它。实际上,如果您有.npz文件,并使用np。Savez,那么load方法将只获取存档信息,但它不会加载整个文件。因此,文件保持打开状态。
您可以通过调用:
来使用with
上下文管理器和npz和npywith np.load('foo.npz', allow_pickle=True) as data:
a = data['a']
与npy文件相同。