Bagaimana saya bisa melihat apa yang ada di dalam ember dengan S3 boto3
? (yaitu melakukan "ls"
)?
Melakukan hal berikut:
import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('some/path/')
pengembalian:
s3.Bucket(name='some/path/')
Bagaimana saya melihat isinya?
mybucket.objects.filter(Prefix='foo/bar')
dan itu hanya akan mendaftar objek dengan awalan itu. Anda juga dapat melewatiDelimiter
parameter.object
nama variabel karena akan membayangi tipe globalobject
.Ini mirip dengan 'ls' tetapi tidak memperhitungkan konvensi folder awalan dan akan mencantumkan objek dalam ember. Terserah kepada pembaca untuk menyaring awalan yang merupakan bagian dari nama Kunci.
Dengan Python 2:
Dengan Python 3:
sumber
conn.list_objects(Bucket='bucket_name', Prefix='prefix_string')['Contents']
Saya berasumsi Anda telah mengkonfigurasi otentikasi secara terpisah.
sumber
Jika Anda ingin meneruskan kunci ACCESS dan SECRET (yang seharusnya tidak Anda lakukan, karena tidak aman):
sumber
Untuk menangani daftar kunci yang besar (yaitu ketika daftar direktori lebih besar dari 1000 item), saya menggunakan kode berikut untuk mengumpulkan nilai-nilai kunci (yaitu nama file) dengan banyak daftar (terima kasih kepada Amelio di atas untuk baris pertama). Kode untuk python3:
sumber
Fungsi utilitas s3
keys
saya pada dasarnya adalah versi optimal dari jawaban @ Hephaestus:Dalam pengujian saya (boto3 1.9.84), ini secara signifikan lebih cepat daripada kode yang setara (tetapi lebih sederhana):
Karena S3 menjamin hasil penyortiran biner UTF-8 ,
start_after
optimasi telah ditambahkan ke fungsi pertama.sumber
list()
untuk mengembalikan daftar file.Cara yang lebih pelit, alih-alih iterasi melalui perulangan for Anda juga bisa mencetak objek asli yang berisi semua file di dalam bucket S3 Anda:
sumber
files_in_s3
adalah "daftar objek". Tidak ada hal seperti itu di Python. Ini lebih merupakan iterable dan saya tidak bisa membuat kode Anda bekerja dan karenanya downvoted. Daripada saya menemukan kesalahan dan melihat maksud Anda tetapi tidak bisa membatalkan downvote saya.Ringkasan Obyek:
Ada dua pengidentifikasi yang dilampirkan ke Ringkasan ObjectSum:
boto3 S3: ObjectSummary
Lebih lanjut tentang Kunci Objek dari Dokumentasi AWS S3:
Berikut ini beberapa contoh kode yang menunjukkan cara mendapatkan nama bucket dan kunci objek.
Contoh:
sumber
Saya baru saja melakukannya seperti ini, termasuk metode otentikasi:
sumber
sumber
ls
. Bagaimana Anda melakukan itu..hanya mencetak file di rootDengan sedikit modifikasi pada kode @Hephaeastus di salah satu komentar di atas, tulis metode di bawah ini untuk membuat daftar folder dan objek (file) di jalur yang diberikan. Bekerja mirip dengan perintah s3 ls.
Ini daftar semua objek / folder di jalur yang diberikan. Folder_path dapat dibiarkan sebagai Tidak Ada secara default dan metode akan mendaftar konten langsung dari akar ember.
sumber
Ini solusinya
impor boto3
s3 = boto3.resource ('s3')
BUCKET_NAME = 'Nama Ember S3 Anda eg'deletemetesting11' '
allFiles = s3.Bucket (BUCKET_NAME) .objects.all ()
untuk file di allFiles: print (file.key)
sumber
Dapat juga dilakukan sebagai berikut:
sumber
Jadi Anda meminta yang setara dengan
aws s3 ls
di boto3. Ini akan membuat daftar semua folder dan file tingkat atas. Ini adalah yang terdekat yang bisa saya dapatkan; hanya mencantumkan semua folder tingkat atas. Mengejutkan betapa sulitnya operasi sederhana itu.sumber