代码之家  ›  专栏  ›  技术社区  ›  Gabriel Ilharco

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

  •  0
  • Gabriel Ilharco  · 技术社区  · 7 年前

    我在某个url上有一堆包含numpy数组的文件(例如。, https://my_url/my_np_file.npy )我正试着把它们加载到我的电脑里。

    如果我手动下载文件,我可以使用 np.load('file_path') .如果我获取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

    有没有办法在不保存文件的情况下加载阵列?

    2 回复  |  直到 7 年前
        1
  •  11
  •   LucasB    6 年前

    你失踪了 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!
    
        2
  •  0
  •   Henry Kim    7 年前

    你能添加一个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])
    
        3
  •  0
  •   Rocky Li    7 年前

    我只是利用 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!
    

    这将首先下载文件本身,但会自动下载。