【问题标题】:Unzip my_file.zip pulled from s3 using boto使用 boto 解压缩从 s3 中提取的 my_file.zip
【发布时间】:2016-03-03 03:51:05
【问题描述】:

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

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 方法似乎没有达到我想要的效果。

【问题讨论】:

    标签: python amazon-s3 boto


    【解决方案1】:

    您应该查看 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()
    

    为了可读性,列表理解可能应该被分解 - 但我按照你的原始帖子进行比较。

    祝你好运!

    【讨论】:

    • 我认为应该是“from boto”,而不是“from goto”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2020-12-15
    • 2020-02-12
    • 2021-09-12
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多