np.load() 应该在 with with open
Should np.load() be in with with open
传统上 python 一个用户 with
打开文件,这样当您退出内部范围时文件会自动关闭。
with open('file.pickle', 'rb') as f:
data = pickle.load(f)
在 numpy documentation 中它同时显示 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
上下文关闭时一样自动关闭数据文件?
不,a=np.load()
不会自动关闭文件。您可以使用 a.close()
自行关闭它。事实上,如果你用 np.savez 保存了 .npz 文件,那么加载方法只会获取存档信息,但不会加载整个文件。因此,文件保持打开状态。
您可以通过调用以下命令将 with
上下文管理器与 npz 和 npy 一起使用:
with np.load('foo.npz', allow_pickle=True) as data:
a = data['a']
同样适用于 npy 文件。
使用我当前工作目录中的随机文件:
使用 with
和 npz
:
In [51]: with np.load('f.npz') as f:print(f['b'])
['q' 'r' 's']
使用 'plain' 加载 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__
传统上 python 一个用户 with
打开文件,这样当您退出内部范围时文件会自动关闭。
with open('file.pickle', 'rb') as f:
data = pickle.load(f)
在 numpy documentation 中它同时显示 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
上下文关闭时一样自动关闭数据文件?
不,a=np.load()
不会自动关闭文件。您可以使用 a.close()
自行关闭它。事实上,如果你用 np.savez 保存了 .npz 文件,那么加载方法只会获取存档信息,但不会加载整个文件。因此,文件保持打开状态。
您可以通过调用以下命令将 with
上下文管理器与 npz 和 npy 一起使用:
with np.load('foo.npz', allow_pickle=True) as data:
a = data['a']
同样适用于 npy 文件。
使用我当前工作目录中的随机文件:
使用 with
和 npz
:
In [51]: with np.load('f.npz') as f:print(f['b'])
['q' 'r' 's']
使用 'plain' 加载 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__