从http响应加载numpy数组而不保存文件

c9qzyr3d  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(144)

我有一堆包含numpy数组的文件在某个url(例如,https://my_url/my_np_file.npy),我试图将它们加载到我的计算机中。
如果我手动下载文件,我可以使用np.load('file_path')正确加载numpy数组。如果我接受url响应(使用下面的代码),保存内容到文件中,然后使用np.load(),它也可以工作。

response, content = http.request('https://my_url/my_np_file.npy')

字符串
如果我尝试从内容字符串加载数组,我会得到下面的错误。这可能是因为np.load将字符串输入解释为文件的名称,而不是数据本身。
File“/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py“,line 370,in load = open(file,“rb”)TypeError:file()argument 1 must be encoded string without null bytes,not str
有没有什么方法可以在不保存文件的情况下加载阵列?

gojuced7

gojuced71#

您缺少了io.BytesIO,使字符串对np.load来说看起来像一个文件对象!
以下是您正在寻找的内容:

import requests
import io

response = requests.get('https://my_url/my_np_file.npy')
response.raise_for_status()
data = np.load(io.BytesIO(response.content))  # Works!

字符串

ohfgkhjo

ohfgkhjo2#

我刚刚使用shutil制定了一个解决方案

import requests
import shutil
response = requests.get('http://path/to/test.npy', stream=True)

with open('haha.npy', 'wb') as fin:
    shutil.copyfileobj(response.raw, fin)

np.load('haha.npy') # Works!

字符串
这将首先下载文件本身,但以自动方式。

edqdpe6u

edqdpe6u3#

你能添加一个HTTP响应的例子吗?(来自https://my_url/my_np_file.npy
也许你可以尝试np.fromstring后,你检索的网页响应。
这是上述参考文献中的一个例子。

>>> np.fromstring('1 2', dtype=int, sep=' ')
array([1, 2])
>>> np.fromstring('1, 2', dtype=int, sep=',')
array([1, 2])

字符串

相关问题