我有一堆包含某些URL处的numpy数组的文件(例如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
会将输入的字符串解释为文件的名称,而不是数据本身。
文件“ /usr/lib/python2.7/dist-packages/numpy/lib/npyio.py”,行 370,在负载中 fid = open(file,“ rb”)TypeError:file()参数1必须是没有空字节的编码字符串,不是str
是否有任何无需保存文件即可加载阵列的方法?
答案 0 :(得分:3)
您缺少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!
答案 1 :(得分:1)
我刚刚使用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!
这将首先自动下载文件本身,但会自动进行。
答案 2 :(得分:0)
您可以添加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])