2015-05-02 75 views
0

我有一个名为combine.gz的文件,我需要从s3的子文件夹下载文件。我能够到达combine.gz文件(特别是每个目录一个),但我无法在boto中找到一个方法将.gz文件读取到本地机器。使用boto从s3存储桶的子目录中下载.gz文件

所有我能找到的是boto.utils.fetch_file,key.get_contents_to_filename, key.get_contents_to_file所有这些方法,据我所知,直接流文件的内容。

有没有办法让我首先使用boto从S3读取.gz格式的压缩文件到我的本地机器上,然后解压缩它?

任何帮助将不胜感激。

+1

对你来说,“流文件的内容”和“读文件”之间的区别是什么?它们听起来像我的同义词。 – abarnert

+0

你需要boto吗?为什么不直接用urllib或请求下载文件? –

+0

[使用boto python以递归方式从s3下载文件](http://stackoverflow.com/questions/13063474/downloading-the-files-from-s3-recursively-using-boto-python) –

回答

3

您可以将整个内容读取为字符串,然后将其作为字符串对象进行管理。这是非常危险的,可能会导致内存或缓冲区问题,所以要小心。

检查到使用cStringIO.StringIO,gzip.GzipFile和博托

datastring = key.get_contents_as_string() 
data = cStringIO.StringIO(datastring) 
rawdata = gzip.GzipFile(fileobj=data).read() 

再次 - 要小心,因为这有大量内存和潜在的安全问题事件gzip文件的格式不正确。如果你不控制双方,你会想试着包装,除了防守编码。

相关问题