使用boto解压缩从s3中拉出的my_file.zip

时间:2015-03-16 20:51:30

标签: python amazon-s3 boto

我正在尝试使用boto打开.zip中的s3文件。我正在尝试直接处理数据,我想避免创建临时文件。

In [201]: import StringIO

In [202]: import boto

In [203]: conn = boto.connect_s3()

In [204]: my_bucket = conn.get_bucket('my_bucket')

In [205]: my_list = [ele for ele in my_bucket.list('my_file.zip')]

In [206]: f = StringIO.StringIO()

In [207]: my_list[0].get_file(f)

In [208]: f.seek(0)

如果文件没有压缩,我只会使用:

my_content = my_list[0].get_contents_as_string()

但由于它是拉链的,我正在变垃圾。

An answer to this question使用gzip做了我想做的事(我借用了它的一些尝试),但我找不到用于zip的任何内容。我尝试使用zipfileZipFile,但readextractextractall方法似乎没有做我想要的。

1 个答案:

答案 0 :(得分:3)

你应该看一下python模块gzip:

https://docs.python.org/2/library/gzip.html

你应该能够使用gzip进行stringIO。

from boto.s3.connection import S3Connection
import gzip
from StringIO import StringIO

S3Conn = S3Connection() # assuming your .boto has been setup
Bucket = S3Conn.get_bucket('my_bucket')
my_list = [gzip.GzipFile(fileobj=(StringIO(ele.get_contents_as_string()))) for ele in Bucket.list()]
#for readability I pulled this out
for item in my_list:
    item.read()

为了便于阅读,列表理解可能应该被打破 - 但我跟着你的原始帖子进行比较。

祝你好运!