繁体   English   中英

从 python 中 S3 存储桶内的文件夹下载文件

[英]Download a file from a folder inside S3 bucket in python

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

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 存储桶下载文件,并以附件形式结束 email。 此文件夹中只有一个文件,但要获取此文件,我们需要遍历该文件夹,因为我不知道文件的名称。

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

AttributeError: 'str' object 没有属性 '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 的新手

正如这个答案和那个答案中所描述的,有多种方法可以解决这个问题。 在您的情况下,您将目标保存为字符串,但从未对其进行任何操作。 您从未将其传递给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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM