我正在使用此函数从S3获取数据:
s3 = boto3.resource('s3')
s3client = boto3.client('s3')
Bucket = s3.Bucket('ais-django');
obj = s3.Object('ais-django', 'Event/')
list = s3client.list_objects_v2(Bucket='ais-django' ,Prefix='Event/' )
for s3_key in list:
filename = s3_key['Key']
当我为Event文件夹使用前缀时(路径就像'ais-django / Event /'),它会产生如下异常输出:
{
'IsTruncated': False,
'Prefix': 'Event/',
'ResponseMetadata': {
'HTTPHeaders': {
'date': 'Mon, 11 Jun 2018 12:42:35 GMT',
'content-type': 'application/xml',
'transfer-encoding': 'chunked',
'x-amz-bucket-region': 'us-east-1',
'x-amz-request-id': '94ADDB21361252F3',
'server': 'AmazonS3',
'x-amz-id-2': 'IVuVQuB2V7nClm5FaX4FRbt6brS3gAiuwpERnZxknIWoZLH65LerURwmoynKW5sv37VP6FdbYho='
},
'RequestId': '94ADDB21361252F3',
'RetryAttempts': 0,
'HostId': 'IVuVQuB2V7nClm5FaX4FRbt6brS3gAiuwpERnZxknIWoZLH65LerURwmoynKW5sv37VP6FdbYho=',
'HTTPStatusCode': 200
},
'MaxKeys': 1000,
'Name': 'ais-django',
'KeyCount': 0
}
虽然没有前缀,但我这样添加:
list = s3client.list_objects_v2(Bucket='ais-django' )[Contents]
它提供了所有对象的列表。
那么如何才能获取特定文件夹中的所有对象?
答案 0 :(得分:1)
这是你应该这样做的方式:)
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('ais-django')
for o in bucket.objects.filter(Prefix='Event/test-event'):
print(o.key)
这是你得到的结果
结果包含事件/测试事件/ ,因为AWS s3中没有文件夹系统,一切都是对象,因此事件/测试事件/ 也是如此因为事件/ test-event / image.jpg 都被视为对象。
如果你只想要内容,即图像,你可以这样做,
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('ais-django')
for o in bucket.objects.filter(Prefix='Event/test-event'):
filename=o.key
if filename.endswith(".jpeg") or filename.endswith(".jpg") or filename.endswith(".png"):
print(o.key)
现在在这种情况下我们得到事件/测试事件/ 18342087_1323920084341024_7613721308394107132_n.jpg ,因为我们正在过滤我们的结果,这是我现在唯一的图像对象