Jak mogę zobaczyć, co znajduje się w wiadrze w S3 boto3
? (tj. zrobić "ls"
)?
Wykonując następujące czynności:
import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('some/path/')
zwroty:
s3.Bucket(name='some/path/')
Jak mogę zobaczyć jego zawartość?
mybucket.objects.filter(Prefix='foo/bar')
a wyświetli się lista obiektów z tym prefiksem. Możesz także przekazaćDelimiter
parametr.object
jako nazwy zmiennej, ponieważ będzie to cień globalnego typuobject
.Jest to podobne do „ls”, ale nie uwzględnia konwencji folderów z prefiksem i wyświetla listę obiektów w segmencie. Czytelnik musi odfiltrować prefiksy, które są częścią nazwy klucza.
W Python 2:
W Pythonie 3:
źródło
conn.list_objects(Bucket='bucket_name', Prefix='prefix_string')['Contents']
Zakładam, że osobno skonfigurowałeś uwierzytelnianie.
źródło
Jeśli chcesz przekazać klucze ACCESS i SECRET (czego nie powinieneś robić, ponieważ nie jest to bezpieczne):
źródło
W celu obsługi dużych list kluczy (tj. Gdy lista katalogów jest większa niż 1000 pozycji), użyłem następującego kodu do kumulacji wartości kluczy (tj. Nazw plików) z wieloma listami (dzięki Amelio powyżej dla pierwszych wierszy). Kod dotyczy python3:
źródło
Moja funkcja narzędziowa s3
keys
jest zasadniczo zoptymalizowaną wersją odpowiedzi @ Hefajstosa:W moich testach (boto3 1.9.84) jest znacznie szybszy niż równoważny (ale prostszy) kod:
Ponieważ S3 gwarantuje binarne wyniki UTF-8 ,
start_after
do pierwszej funkcji dodano optymalizację.źródło
list()
aby zwrócić listę plików.Bardziej oszczędny sposób, zamiast iteracji przez pętlę for, możesz po prostu wydrukować oryginalny obiekt zawierający wszystkie pliki w segmencie S3:
źródło
files_in_s3
jest to „obiekt listy”. W Pythonie nie ma czegoś takiego. Raczej jest iterowalny i nie mogłem sprawić, by Twój kod działał i dlatego został odrzucony. Potem znalazłem błąd i zrozumiałem twój punkt, ale nie mogłem cofnąć mojej oceny.ObjectSummary:
Istnieją dwa identyfikatory, które są dołączone do ObjectSummary:
boto3 S3: ObjectSummary
Więcej na temat kluczy obiektów z dokumentacji AWS S3:
Oto przykładowy kod, który pokazuje, jak uzyskać nazwę segmentu i klucz obiektu.
Przykład:
źródło
Właśnie tak to zrobiłem, w tym metodę uwierzytelniania:
źródło
źródło
ls
. Jak byś to zrobił ... wydrukuj tylko pliki w katalogu głównymZ niewielką modyfikacją kodu @Hephaeastus w jednym z powyższych komentarzy, napisałem poniższą metodę, aby wyświetlić listę folderów i obiektów (plików) w danej ścieżce. Działa podobnie do polecenia s3 ls.
Spisuje wszystkie obiekty / foldery w danej ścieżce. Ścieżkę_folderu można domyślnie pozostawić jako Brak, a metoda wyświetli bezpośrednią zawartość katalogu głównego wiadra.
źródło
Oto rozwiązanie
importuj boto3
s3 = boto3.resource ('s3')
BUCKET_NAME = 'Twoja nazwa wiadra S3 np.
allFiles = s3.Bucket (BUCKET_NAME) .objects.all ()
dla pliku we wszystkich plikach: print (plik.key)
źródło
Można to również zrobić w następujący sposób:
źródło
Pytasz więc o odpowiednik
aws s3 ls
w boto3. Będzie to lista wszystkich folderów i plików najwyższego poziomu. To najbliższe, jakie mogłem dostać; wyświetla tylko wszystkie foldery najwyższego poziomu. Zaskakujące, jak trudna jest taka prosta operacja.źródło