python-3.x - 使用 boto3 返回 s3 前缀中的对象列表
问题描述
我有下面的boto3代码。在代码中,我试图获取 s3 前缀中的对象列表。s3 前缀中对象的完整路径是:
文件路径:
s3://our_data/our_folder/part-00000-bf597559-8a11-4e6b-8631-ef7c138b4583-c000.txt
当我运行下面的代码时,它不会返回任何东西,但我可以发誓几个月前它有效。最近与此相关的 boto3 有什么变化,还是我的代码中遗漏了什么?
代码:
import boto3
s3_client = boto3.client('s3',
region_name='us-west-2')
trz_bucket = 'our_data'
trz_prefix = 'our_folder/'
result = s3_client.list_objects(Bucket=trz_bucket, Prefix=trz_prefix, Delimiter='v')
result.get('CommonPrefixes')
解决方案
如果CommonPrefixes
您提供Delimiter
:
list_objects(Bucket=trz_bucket, Prefix=trz_prefix, Delimiter='/')
这是一个使用Delimiter
和CommonPrefixes
使用 AWS CLI 的示例(其工作方式与使用 boto3 相同):
$ aws s3 mb s3://test-delimiter
make_bucket: test-delimiter
$ aws s3 cp x.py s3://test-delimiter/folder1/
upload: ./x.py to s3://test-delimiter/folder1/x.py
$ aws s3 cp x.py s3://test-delimiter/folder2/
upload: ./x.py to s3://test-delimiter/folder2/x.py
$ aws s3api list-objects --bucket test-delimiter --delimiter '/'
{
"CommonPrefixes": [
{
"Prefix": "folder1/"
},
{
"Prefix": "folder2/"
}
]
}
$ aws s3 cp x.py s3://test-delimiter/folder1/folder3/
upload: ./x.py to s3://test-delimiter/folder1/folder3/x.py
$ aws s3api list-objects --bucket test-delimiter --delimiter '/' --prefix folder1/
{
"Contents": [
{
"Key": "folder1/x.py",
"LastModified": "2021-06-05T07:52:35+00:00",
"ETag": "\"1083f8ddcea96dd6b9d8a3a582373c71\"",
"Size": 727,
"StorageClass": "STANDARD"
}
}
],
"CommonPrefixes": [
{
"Prefix": "folder1/folder3/"
}
]
}
推荐阅读
- azure-devops - Azure DevOps 环境 - 管道权限默认值(是否开放访问)
- content-management-system - 无头 shopify,但仍将 shopify 用作客户的 cms/页面构建器,而不是第三方 cms
- kotlin - 调用方法而不创建实例
- checkout - 当我选择结帐时,我的结帐页面没有指向正确的页面
- java - x-- causes if to loop infinitely
- nginx - Nginx 重写 cgi-bin URL 隐藏密码输入
- r - 是否有在保持颜色的同时向 ggplot 饼图添加模式的功能?
- typescript - 对测试文件使用 tsconfig 标志,但从构建中排除它们
- excel - 最后一行 + 范围
- java - 如何将 startActivityForResult() 更改为 ActivityResultLauncher?