从HTTP链接加载.npz

时间:2018-01-20 10:43:52

标签: python numpy deep-learning jupyter-notebook wget

我使用Web服务通过AWS上的Jupyter Notebook训练我的一些深度学习模型。出于成本原因,我想将我的数据作为.npz文件存储在我自己的服务器上,并将它们直接加载到我的远程机器的内存中。

np.load()功能不适用于http个链接并使用urlretrieve我无法使其正常工作。我只使用wget下载数据,然后从本地路径加载文件。但是,这并不能完全解决我的问题。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

问题是,如果np.load的第一个参数是类似文件的对象,则它必须是seek - 能够:

  

file:类文件对象,字符串或pathlib.Path要读取的文件。   类文件对象必须支持seek()和read()方法。雪菜   文件要求类文件对象支持readline()方法   同样。

如果要通过http提供这些文件,并且您的服务器支持Range标头,则可以使用此answer中提供的实现(Python 2),例如:

F = HttpFile('http://localhost:8000/meta.data.npz')
with np.load(F) as data:
    a = data['arr_0']
    print(a)

或者,您可以获取整个文件,创建一个类似内存文件的对象并将其传递给np.load

from io import BytesIO
import numpy as np
import requests

r = requests.get('http://localhost:8000/meta.data.npz', stream = True)
data = np.load(BytesIO(r.raw.read()))
print(data['arr_0'])