从python中S3 bucket内的文件夹下载文件

2024-10-03 21:33:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我将一个bucket名称存储为string

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' object has no attribute '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新手


Tags: 文件文件夹名称objects3mysqlhgdest1
1条回答
网友
1楼 · 发布于 2024-10-03 21:33:16

正如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())

相关问题 更多 >