【问题标题】:Check if folder exists in the S3 bucket and create a folder if not检查 S3 存储桶中是否存在文件夹,如果不存在则创建文件夹
【发布时间】:2022-11-06 21:24:23
【问题描述】:

我正在尝试编写一个代码,其中在 S3 存储桶中我想检查该文件夹是否存在,如果不存在,我想创建该文件夹。以下是我的代码。

def checkiffolderexists(bucket:str, path:str) -> bool:

    s3 = boto3.Session(profile_name='saml').client('s3')
    if not path.endswith('/'):
        path = path + '/'
        print(path)
    resp = s3.list_objects(Bucket=bucket, Prefix=path, Delimiter='/', MaxKeys=1)
    return 'Contents' in resp

我将以下参数传递给创建的此方法。

checkiffolderexists('star-mi-qa-ctset-delta-us-east-1','star-mi-qa-ctset-delta-us-east-1/vendor=ctset/type=own_v5/year=2022/month=10/day=01') 

star-mi-qa-ctset-delta-us-east-1 是我的存储桶名称,我想在其中检查 day=01/ 文件夹是否存在。如果没有,我想在传递给该方法的同一路径中创建该文件夹。这里的问题是即使文件夹存在那里,该方法返回我错误。在将参数传递给方法或代码时我犯了什么错误?

【问题讨论】:

    标签: python amazon-web-services boto3


    【解决方案1】:

    与分隔符匹配的键不会出现在Contents 中。

    来自documentation

    导致在前缀和第一次出现的分隔符之间包含相同字符串的键被汇总到 CommonPrefixes 集合中的单个结果元素中。这些汇总的键不会在响应中的其他地方返回.

    (强调我的。)

    调用不带此参数的方法将起作用:

    resp = s3.list_objects(Bucket=bucket, Prefix=path, MaxKeys=1)
    

    【讨论】:

      猜你喜欢
      • 2016-11-12
      • 2020-06-14
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2018-10-31
      相关资源
      最近更新 更多