【问题标题】:Download a file from a folder inside S3 bucket in python从 python 中的 S3 存储桶内的文件夹下载文件
【发布时间】:2020-07-25 18:37:52
【问题描述】:

我有一个存储为字符串的存储桶名称

s3_dest1 = "s3://fbg-hg/AGLUE/MYSQL/QUERY1/"
s3_dest2 = "s3://fbg-hg/AGLUE/MYSQL/QUERY2/"
s3_dest3 = "s3://fbg-hg/AGLUE/MYSQL/QUERY3/"
s3_dest4 = "s3://fbg-hg/AGLUE/MYSQL/QUERY4/"
s3_dest5 = "s3://fbg-hg/AGLUE/MYSQL/QUERY5/"
s3_dest6 = "s3://fbg-hg/AGLUE/MYSQL/QUERY6/"

我想从这个 s3 存储桶下载文件并将电子邮件作为附件结束。 此文件夹中只有一个文件,但要获取此文件,我们需要遍历文件夹,因为我不知道文件的名称。

这就是我正在做的,但是这段代码给了我错误。

AttributeError: 'str' 对象没有属性 'objects'

这是我的python代码

my_list = [s3_dest1, s3_dest2,s3_dest3,s3_dest4,s3_dest5,s3_dest6]
for s3_dest in my_list:
    s3=boto3.client('s3')
    for s3_object in s3_dest.objects.all():
        filename = os.path.split(s3_object.key)
        print(filename)

我是 python 新手

【问题讨论】:

    标签: python python-3.x amazon-s3


    【解决方案1】:

    正如this 答案和that 答案中所述,有多种方法可以解决此问题。在您的情况下,您将目标保存为字符串,但从未对其进行任何操作。您从未将其传递给boto3。如果我尝试让您的代码正常工作,它会变成类似

    # Use the bucket name, not a connection string
    my_list = ['fbg-hg/AGLUE/MYSQL/QUERY1', ...]
    attachments = []
    
    s3=boto3.client('s3')
    for bucket_name in my_list:
        bucket = s3.Bucket(bucket_name)
        for s3_object in bucket.objects.all():
            filename = os.path.split(s3_object.key)
            print(filename)
    
            # and then when you want to add it as an attachment
            bytes_buffer = io.BytesIO()
            client.download_fileobj(Bucket=bucket_name,
                                    Key=object_key,
                                    Fileobj=bytes_buffer)
            byte_value = bytes_buffer.getvalue()
            attachments.append(byte_value.decode())
    

    【讨论】:

    猜你喜欢
    • 2015-05-20
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 2013-10-15
    相关资源
    最近更新 更多