我正在尝试使用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
,但read
,extract
和extractall
方法似乎没有做我想要的。
答案 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()
为了便于阅读,列表理解可能应该被打破 - 但我跟着你的原始帖子进行比较。
祝你好运!