2016-11-15 37 views
1

是否有加载/读取numpy中的外部文件(即AWS S3)?我有几个存储在S3中的npy文件。我试图通过S3 presigned url来访问它们,但似乎numpy.load方法或np.genfromtxt都无法读取它们。从Python中加载npy文件

我不想保存本地文件系统上的文件,然后将它们加载到numpy上。

有什么想法?

+0

当然,你需要一些额外的层做所有的网络协议的工作! Numpy的IO可能仅适用于基于文件的IO。在Python3中,你可以尝试'''导入请求; import BytesIO; request = requests.get(url); np.load(BytesIO(request.content))'''。 – sascha

+0

当然,我的代码片断假定S3链接是公共的,不需要身份验证。我不知道情况是否如此。如果没有,你需要一些库来完成这个文件的访问。 – sascha

+0

你能够使用'requests'读取文件吗? –

回答

0

我成功使用了boto和StringIO。 使用boto连接到S3并获得您的存储桶。然后用以下代码将文件读入numpy:

import numpy as np 
    from StringIO import StringIO 
    key=bucket.get_key('YOUR_KEY') 
    data_string=StringIO(key.get_contents_as_string()) 
    data = np.load(data_string) 

我不确定这是最有效的方法,但它不需要公共URL。

干杯, 迈克尔