【问题标题】:Connecting to specific path in s3连接到 s3 中的特定路径
【发布时间】:2019-03-29 11:27:47
【问题描述】:

我正在尝试使用 python 连接到 s3 中的特定文件夹 示例:s3://main_folder/sub_folder1/sub_folder2/

# want to enter sub_folder2 - s3://main_folder/sub_folder1/sub_folder2/
import boto3

def connect_to_s3():
    s3_cli = boto3.resourse('s3')
    bucket = s3_cli.Bucket('sub_folder2')
    for b in bucket.objects.all():
        print(b.key)

我收到此错误:

raise error_class(parsed_response, operation_name) botocore.errorfactory.NoSuchBucket:调用ListObjects操作时出错(NoSuchBucket):指定的bucket不存在

【问题讨论】:

    标签: python-3.x amazon-web-services amazon-s3 boto3


    【解决方案1】:

    错误提示:The specified bucket does not exist

    这是因为s3_cli.Bucket('sub_folder2') 想要Bucket 的名称,但您提供了文件夹的名称而没有告诉它存储桶的名称。

    如果您希望仅对存储桶的子集执行操作,您可以使用 filterprefix

    import boto3
    
    def connect_to_s3():
        s3_cli = boto3.resourse('s3')
        bucket = s3_cli.Bucket('my-bucket')
        for b in bucket.objects.filter(Prefix='sub_folder1/sub_folder2/').all():
            print(b.key)
    

    【讨论】:

    • 你能给我一个示例,我如何在 sub_folder2 中创建 sub_folder3 或在 sub_folder2 中创建一些文件?
    • 文件夹在 Amazon S3 中不存在。相反,对象的Key 包含完整路径,例如folder1/folder2/foo.txt。因此,您可以在任何文件夹中创建对象,即使该文件夹不存在!例如,在AWS Command-Line Interface (CLI) 中,您可以使用aws s3 cp foo.txt s3://my-bucket/folder1/folder2/foo.txt,它会自动“创建”文件夹。但如果该对象随后被删除,文件夹将消失。 Amazon S3 是一个平面存储系统,仅模拟文件夹。它们实际上并不存在。看起来就像他们一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2017-08-24
    • 2021-04-24
    • 2018-05-07
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多