gpt4 book ai didi

python - 列出 S3 对象直到第一级

转载 作者:行者123 更新时间:2023-12-02 15:54:40 28 4
gpt4 key购买 nike

我正在尝试像这样列出 s3 对象:

for key in s3_client.list_objects(Bucket='bucketname')['Contents']:
logger.debug(key['Key'])

我只想打印存在于第一层的文件夹名称或文件名称。

例如,如果我的桶有这个:

bucketname
folder1
folder2
text1.txt
text2.txt
catallog.json

我只想打印folder1folder2catalog.json。我不想包含 text1.txt 等。

但是,我当前的解决方案还会打印存储桶名称中文件夹中存在的文件名。

我该如何修改它?我看到有一个 'Prefix' 参数,但不确定如何使用它。

最佳答案

可以在“/”上拆分key,只保留第一层:

level1 = set()  #Using a set removes duplicates automatically 
for key in s3_client.list_objects(Bucket='bucketname')['Contents']:
level1.add(key["Key"].split("/")[0]) #Here we only keep the first level of the key

#then print your level1 set
logger.debug(level1)

/!\警告

  1. list_object 方法已修改,建议根据AWS S3 documentation 使用list_objects_v2
  2. 此方法仅返回部分或全部(最多 1,000 个)键。如果你想确保你得到所有的 key ,你需要使用函数返回的continuation_token:
level1 = set()
continuation_token = ""
while continuation_token is not None:
extra_params = {"ContinuationToken": continuation_token} if continuation_token else {}
response = s3_client.list_objects_v2(Bucket="bucketname", Prefix="", **extra_params)
continuation_token = response.get("NextContinuationToken")
for obj in response.get("Contents", []):
level1.add(obj.get("Key").split("/")[0])

logger.debug(level1)

关于python - 列出 S3 对象直到第一级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71708707/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com