2015-05-14 21 views
45

Jak mogę sprawdzić, co jest w środku wiadra w S3 z boto3? (tzn. czy "ls")?Zawartość listy wiadra z boto3

wykonując następujące czynności:

import boto3 
s3 = boto3.resource('s3') 
my_bucket = s3.Bucket('some/path/') 

Powroty:

s3.Bucket(name='some/path/') 

Jak mogę zobaczyć jej zawartość?

Odpowiedz

53

Jednym ze sposobów, aby zobaczyć zawartość będzie:

for object in mybucket.objects.all(): 
    print(object) 
+1

Czy mogę pobrać klucze pod określoną ścieżką w wiadrze lub ze szczególnym ogranicznikiem za pomocą boto3 ?? –

+21

Powinieneś być w stanie powiedzieć '' mybucket.objects.filter (Prefix = 'foo/bar') '' i będzie on wyświetlał tylko obiekty z tym prefiksem. Możesz także przekazać parametr '' Ogranicznik''. – garnaat

+1

nie działa z boto3 AttributeError: Obiekt 'S3' nie ma atrybutu 'obiektów' – Shek

35

Jest to podobne do „ls”, ale to nie bierze pod uwagę konwencję folderu prefiks i będzie lista przedmiotów w wiadrze. Od czytnika zależy odfiltrowanie przedrostków, które są częścią nazwy klucza.

W Pythonie 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) 

W Pythonie 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']) 
+16

Jeśli chcesz użyć prefiksu, możesz to zrobić tak: 'conn.list_objects (Bucket = 'bucket_name', Prefix = 'prefix_string') ['Contents']' – markonovak

7

Jestem zakładając skonfigurowano uwierzytelnianie oddzielnie.

import boto3 
s3 = boto3.resource('s3') 

my_bucket = s3.Bucket('bucket_name') 

for file in my_bucket.objects.all(): 
    print file.key 
9

Jeśli chcesz przekazać dostępu i kluczy sekret:

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) 
+1

To jest mniej bezpieczne niż posiadanie plik poświadczeń w ~/.aws/credentials. Chociaż jest to prawidłowe rozwiązanie. –

0

bardziej oszczędne drogę, zamiast iteracja poprzez pętli for można również po prostu wydrukować oryginalny obiekt zawierający wszystkie pliki wewnątrz Twój S3 wieloczynnościowy:

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() #could just print this "list" object 
0

list_objects vs objects.All() byłoby list_objects poprzecznych podfoldery, wiem objects.All będą przemierzać podfoldery oraz

Powiązane problemy