Layanan Penyimpanan Objek (OSS) SDK untuk Python menyediakan iterator terenkapsulasi untuk menampilkan objek dalam sebuah bucket. Anda dapat menggunakan iterator ini untuk memfilter objek berdasarkan awalan, posisi awal, dan kriteria lainnya.
Penggunaan
OSS SDK untuk Python menyediakan dua iterator untuk menampilkan objek: ObjectIterator, yang didasarkan pada operasi GetBucket (ListObjects), dan ObjectIteratorV2, yang didasarkan pada operasi ListObjectsV2 (GetBucketV2). Perbedaan utamanya adalah:
ObjectIterator: Mengembalikan informasi pemilik secara default.ObjectIteratorV2: Menggunakan parameterfetch_owneruntuk menentukan apakah akan mengembalikan informasi pemilik.Penggunaan
ObjectIteratorV2memerlukan OSS SDK untuk Python versi 2.12.0 atau lebih baru.
Kami merekomendasikan ObjectIteratorV2 karena dukungan yang lebih baik untuk bucket dengan pengendalian versi diaktifkan.
ObjectIteratorV2Konstruktoross2.ObjectIteratorV2(bucket, prefix='', delimiter='', continuation_token='', start_after='', fetch_owner=False, encoding_type = 'url', max_keys=100, max_retries=None, headers=None)ObjectIteratorKonstruktoross2.ObjectIterator(bucket, prefix='', delimiter='', marker='', max_keys=100, max_retries=None, headers=None)
Contoh kode
Sebelum menjalankan kode, instal OSS SDK untuk Python dan konfigurasikan variabel lingkungan untuk kredensial akses. Untuk informasi lebih lanjut, lihat Panduan Cepat SDK Python. Akun Alibaba Cloud memiliki semua izin secara default. Jika Anda menggunakan Pengguna Resource Access Management (RAM) atau Peran RAM, pastikan bahwa pengguna atau peran tersebut memiliki izin oss:ListObjects.
Menampilkan semua objek
ObjectIteratorV2 (Direkomendasikan)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan semua objek dalam bucket.
print("Menampilkan semua objek:")
for obj in oss2.ObjectIteratorV2(bucket):
print(f"Nama objek: {obj.key}, Ukuran: {obj.size} byte")
if __name__ == "__main__":
main()Untuk mengambil informasi pemilik objek, atur fetch_owner=True.
# Menampilkan semua objek dan mendapatkan informasi pemiliknya.
for obj in oss2.ObjectIteratorV2(bucket, fetch_owner=True):
print(f"Nama objek: {obj.key}")
print(f"Nama pemilik: {obj.owner.display_name}")
print(f"ID Pemilik: {obj.owner.id}")ObjectIterator
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan semua objek dalam bucket.
print("Menampilkan semua objek:")
for obj in oss2.ObjectIterator(bucket):
print(f"Nama objek: {obj.key}, Ukuran: {obj.size} byte")
if __name__ == "__main__":
main()Menampilkan sejumlah objek tertentu
ObjectIteratorV2 (Direkomendasikan)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from itertools import islice
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan 10 objek pertama dalam bucket.
print("Menampilkan 10 objek pertama:")
for obj in islice(oss2.ObjectIteratorV2(bucket), 10):
print(f"Nama objek: {obj.key}")
if __name__ == "__main__":
main()ObjectIterator
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from itertools import islice
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan 10 objek pertama dalam bucket.
print("Menampilkan 10 objek pertama:")
for obj in islice(oss2.ObjectIterator(bucket), 10):
print(f"Nama objek: {obj.key}")
if __name__ == "__main__":
main()Menampilkan objek dengan awalan tertentu
Asumsikan bahwa sebuah bucket berisi empat objek: oss.jpg, fun/test.jpg, fun/movie/001.avi, dan fun/movie/007.avi. Garis miring maju (/) digunakan sebagai pemisah folder.
ObjectIteratorV2 (Direkomendasikan)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan semua objek dalam folder fun, termasuk objek dalam subdirektorinya.
print("Menampilkan semua objek dengan awalan fun/:")
for obj in oss2.ObjectIteratorV2(bucket, prefix='fun/'):
print(f"Nama objek: {obj.key}")
if __name__ == "__main__":
main()Output yang Diharapkan:
Menampilkan semua objek dengan awalan fun/:
Nama objek: fun/
Nama objek: fun/movie/
Nama objek: fun/movie/001.avi
Nama objek: fun/movie/007.avi
Nama objek: fun/test.jpgObjectIterator
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan semua objek dalam folder fun, termasuk objek dalam subdirektorinya.
print("Menampilkan semua objek dengan awalan fun/:")
for obj in oss2.ObjectIterator(bucket, prefix='fun/'):
print(f"Nama objek: {obj.key}")
if __name__ == "__main__":
main()Output yang Diharapkan:
Menampilkan semua objek dengan awalan fun/:
Nama objek: fun/
Nama objek: fun/movie/
Nama objek: fun/movie/001.avi
Nama objek: fun/movie/007.avi
Nama objek: fun/test.jpgMenampilkan objek dan subdirektori dalam direktori tertentu
OSS tidak memiliki konsep folder. Semua elemen disimpan sebagai objek. Untuk membuat folder, Anda dapat membuat objek nol-byte yang diakhiri dengan garis miring maju (/). Konsol OSS menampilkan objek yang diakhiri dengan garis miring maju (/) sebagai folder.
Anda dapat menggunakan parameter delimiter dan prefix untuk mensimulasikan fungsi folder.
Jika Anda mengatur parameter
prefixke nama folder, operasi tersebut mencantumkan semua objek yang dimulai dengan awalan ini. Ini mencakup semua objek dan subfolder dalam folder tersebut, serta semua objek dalam subfolder.Jika Anda juga mengatur parameter
delimiterke garis miring maju (/), operasi tersebut hanya mencantumkan nama objek dan subfolder dalam folder tersebut. Objek dalam subfolder tidak dicantumkan.
ObjectIteratorV2 (Direkomendasikan)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan nama objek dan subfolder dalam folder fun, tetapi tidak objek dalam subfolder.
print("Menampilkan objek dan subdirektori dalam direktori fun:")
for obj in oss2.ObjectIteratorV2(bucket, prefix='fun/', delimiter='/', start_after='fun/'):
# Gunakan metode is_prefix untuk menentukan apakah objek tersebut adalah folder.
if obj.is_prefix():
print(f"Subdirektori: {obj.key}")
else:
print(f"Objek: {obj.key}")
if __name__ == "__main__":
main()Output yang Diharapkan:
Menampilkan objek dan subdirektori dalam direktori fun:
Subdirektori: fun/movie/
Objek: fun/test.jpgObjectIterator
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan nama objek dan subfolder dalam folder fun, tetapi tidak objek dalam subfolder.
print("Menampilkan objek dan subdirektori dalam direktori fun:")
for obj in oss2.ObjectIterator(bucket, prefix='fun/', delimiter='/', marker='fun/'):
# Gunakan metode is_prefix untuk menentukan apakah objek tersebut adalah folder.
if obj.is_prefix():
print(f"Subdirektori: {obj.key}")
else:
print(f"Objek: {obj.key}")
if __name__ == "__main__":
main()Output yang Diharapkan:
Menampilkan objek dan subdirektori dalam direktori fun:
Subdirektori: fun/movie/
Objek: fun/test.jpgMenampilkan objek setelah posisi awal tertentu
Asumsikan bahwa sebuah bucket berisi empat objek berikut: x1.txt, x2.txt, z1.txt, dan z2.txt.
ObjectIteratorV2 (Direkomendasikan)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan semua objek setelah x2.txt (tidak termasuk x2.txt itu sendiri).
print("Menampilkan semua objek setelah x2.txt:")
for obj in oss2.ObjectIteratorV2(bucket, start_after="x2.txt"):
print(f"Nama objek: {obj.key}")
if __name__ == "__main__":
main()Output yang Diharapkan:
Menampilkan semua objek setelah x2.txt:
Nama objek: z1.txt
Nama objek: z2.txtObjectIterator
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan semua objek setelah x2.txt (tidak termasuk x2.txt itu sendiri).
print("Menampilkan semua objek setelah x2.txt:")
for obj in oss2.ObjectIterator(bucket, marker="x2.txt"):
print(f"Nama objek: {obj.key}")
if __name__ == "__main__":
main()Output yang Diharapkan:
Menampilkan semua objek setelah x2.txt:
Nama objek: z1.txt
Nama objek: z2.txtMendapatkan ukuran objek dalam direktori tertentu
ObjectIteratorV2 (Direkomendasikan)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def calculate_folder_size(bucket, folder):
"""Menghitung ukuran total folder tertentu."""
total_size = 0
for obj in oss2.ObjectIteratorV2(bucket, prefix=folder):
total_size += obj.size
return total_size
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan semua objek dan folder dalam direktori root dan menampilkan ukurannya.
print("Menampilkan ukuran objek dan folder dalam direktori root:")
for obj in oss2.ObjectIteratorV2(bucket, delimiter='/'):
if obj.is_prefix():
# Hitung ukuran total folder.
folder_size = calculate_folder_size(bucket, obj.key)
print(f"Direktori: {obj.key}, Ukuran: {folder_size} byte")
else:
# Tampilkan ukuran objek secara langsung.
print(f"Objek: {obj.key}, Ukuran: {obj.size} byte")
if __name__ == "__main__":
main()ObjectIterator
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def calculate_folder_size(bucket, folder):
"""Menghitung ukuran total folder tertentu."""
total_size = 0
for obj in oss2.ObjectIterator(bucket, prefix=folder):
total_size += obj.size
return total_size
def main():
# Dapatkan kredensial akses dari variabel lingkungan.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Atur Endpoint dan Wilayah bucket.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# Inisialisasi bucket.
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# Menampilkan semua objek dan folder dalam direktori root dan menampilkan ukurannya.
print("Menampilkan ukuran objek dan folder dalam direktori root:")
for obj in oss2.ObjectIterator(bucket, delimiter='/'):
if obj.is_prefix():
# Hitung ukuran total folder.
folder_size = calculate_folder_size(bucket, obj.key)
print(f"Direktori: {obj.key}, Ukuran: {folder_size} byte")
else:
# Tampilkan ukuran objek secara langsung.
print(f"Objek: {obj.key}, Ukuran: {obj.size} byte")
if __name__ == "__main__":
main()