Перечисление содержимого ведра с boto3
как я могу увидеть, что внутри ведра в S3 с boto3
? (т. е. сделать "ls"
)?
следующим образом:
import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('some/path/')
возвращает:
s3.Bucket(name='some/path/')
как я вижу его содержимое?
6 ответов:
это похоже на 'ls', но он не учитывает соглашение о префиксной папке и перечисляет объекты в ведре. Это осталось до читателя, чтобы отфильтровать префиксы, которые являются частью имени ключа.
В Python 2:
from boto.s3.connection import S3Connection conn = S3Connection() # assumes boto.cfg setup bucket = conn.get_bucket('bucket_name') for obj in bucket.get_all_keys(): print(obj.key)
В Python 3:
from boto3 import client conn = client('s3') # again assumes boto.cfg setup, assume AWS S3 for key in conn.list_objects(Bucket='bucket_name')['Contents']: print(key['Key'])
Если вы хотите передать доступ и секретные ключи:
from boto3.session import Session ACCESS_KEY='your_access_key' SECRET_KEY='your_secret_key' session = Session(aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY) s3 = session.resource('s3') your_bucket = s3.Bucket('your_bucket') for s3_file in your_bucket.objects.all(): print(s3_file.key)
Я предполагаю, что вы настроили проверку подлинности отдельно.
import boto3 s3 = boto3.resource('s3') my_bucket = s3.Bucket('bucket_name') for awsfile in my_bucket.objects.all(): print file.key
более экономный способ, вместо того, чтобы повторять через цикл for, вы также можете просто распечатать исходный объект, содержащий все файлы внутри вашего ведра S3:
session = Session(aws_access_key_id=aws_access_key_id,aws_secret_access_key=aws_secret_access_key) s3 = session.resource('s3') bucket = s3.Bucket('bucket_name') files_in_s3 = bucket.objects.all() #you can print this iterable with print(list(files_in_s3))
Я просто сделал это так, включая метод аутентификации:
s3_client = boto3.client( 's3', aws_access_key_id='access_key', aws_secret_access_key='access_key_secret', config=boto3.session.Config(signature_version='s3v4'), region_name='region' ) response = s3_client.list_objects(Bucket='bucket_name', Prefix=key) if ('Contents' in response): # Object / key exists! return True else: # Object / key DOES NOT exist! return False