使用boto从s3存储桶中的子目录下载.gz文件

时间:2015-05-02 07:09:57

标签: python amazon-web-services amazon-s3 boto

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

我能找到的只有boto.utils.fetch_filekey.get_contents_to_filenamekey.get_contents_to_file方法,据我所知,所有方法都直接传输文件的内容。

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

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

检查使用cStringIO.StringIO,gzip.GzipFile和boto

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

再次 - 小心,因为在gzip文件格式错误的情况下,这会有很多内存和潜在的安全问题。如果你不控制双方,你会想要尝试包装,除了防守代码。