Object Storage Service (OSS) SDK for Python は、バケット内のオブジェクトをリストするためのカプセル化されたイテレーターを提供します。これらのイテレーターを使用して、プレフィックス、開始位置、およびその他の基準でオブジェクトをフィルターできます。
使用方法
OSS SDK for Python は、オブジェクトをリスト表示するために、ObjectIterator と ObjectIteratorV2 の 2 つのイテレーターを提供します。ObjectIterator は GetBucket (ListObjects) 操作に基づいており、ObjectIteratorV2 は ListObjectsV2 (GetBucketV2) 操作に基づいています。主な違いは次のとおりです。
ObjectIterator: デフォルトでオーナー情報を返します。ObjectIteratorV2:fetch_ownerパラメーターを使用して、オーナー情報を返すかどうかを指定します。ObjectIteratorV2を使用するには、OSS SDK for Python 2.12.0 以降が必要です。
バージョン管理が有効なバケットのサポートが改善されているため、ObjectIteratorV2 を推奨します。
ObjectIteratorV2コンストラクターoss2.ObjectIteratorV2(bucket, prefix='', delimiter='', continuation_token='', start_after='', fetch_owner=False, encoding_type = 'url', max_keys=100, max_retries=None, headers=None)ObjectIteratorコンストラクターoss2.ObjectIterator(bucket, prefix='', delimiter='', marker='', max_keys=100, max_retries=None, headers=None)
コード例
コードを実行する前に、OSS SDK for Python をインストールし、アクセス資格情報の環境変数を設定します。詳細については、「Python SDK クイックスタート」をご参照ください。Alibaba Cloud アカウントは、デフォルトですべての権限を持っています。Resource Access Management (RAM) ユーザーまたは RAM ロールを使用する場合は、ユーザーまたはロールに oss:ListObjects 権限があることを確認してください。
すべてのオブジェクトをリストする
ObjectIteratorV2 (推奨)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# バケット内のすべてのオブジェクトをリストします。
print("List all objects:")
for obj in oss2.ObjectIteratorV2(bucket):
print(f"Object name: {obj.key}, Size: {obj.size} bytes")
if __name__ == "__main__":
main()オブジェクトのオーナー情報を取得するには、fetch_owner=True を設定します。
# すべてのオブジェクトをリストし、そのオーナー情報を取得します。
for obj in oss2.ObjectIteratorV2(bucket, fetch_owner=True):
print(f"Object name: {obj.key}")
print(f"Owner name: {obj.owner.display_name}")
print(f"Owner ID: {obj.owner.id}")ObjectIterator
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# バケット内のすべてのオブジェクトをリストします。
print("List all objects:")
for obj in oss2.ObjectIterator(bucket):
print(f"Object name: {obj.key}, Size: {obj.size} bytes")
if __name__ == "__main__":
main()特定の数のオブジェクトをリストする
ObjectIteratorV2 (推奨)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from itertools import islice
def main():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# バケット内の最初の 10 個のオブジェクトをリストします。
print("List the first 10 objects:")
for obj in islice(oss2.ObjectIteratorV2(bucket), 10):
print(f"Object name: {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():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# バケット内の最初の 10 個のオブジェクトをリストします。
print("List the first 10 objects:")
for obj in islice(oss2.ObjectIterator(bucket), 10):
print(f"Object name: {obj.key}")
if __name__ == "__main__":
main()特定のプレフィックスを持つオブジェクトをリストする
バケットに oss.jpg、fun/test.jpg、fun/movie/001.avi、fun/movie/007.avi の 4 つのオブジェクトが含まれていると仮定します。スラッシュ (/) はフォルダ区切り文字として使用されます。
ObjectIteratorV2 (推奨)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# fun フォルダ内のすべてのオブジェクト (サブディレクトリ内のオブジェクトを含む) をリストします。
print("List all objects with the prefix fun/:")
for obj in oss2.ObjectIteratorV2(bucket, prefix='fun/'):
print(f"Object name: {obj.key}")
if __name__ == "__main__":
main()期待される出力:
List all objects with the prefix fun/:
Object name: fun/
Object name: fun/movie/
Object name: fun/movie/001.avi
Object name: fun/movie/007.avi
Object name: fun/test.jpgObjectIterator
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# fun フォルダ内のすべてのオブジェクト (サブディレクトリ内のオブジェクトを含む) をリストします。
print("List all objects with the prefix fun/:")
for obj in oss2.ObjectIterator(bucket, prefix='fun/'):
print(f"Object name: {obj.key}")
if __name__ == "__main__":
main()期待される出力:
List all objects with the prefix fun/:
Object name: fun/
Object name: fun/movie/
Object name: fun/movie/001.avi
Object name: fun/movie/007.avi
Object name: fun/test.jpg特定のディレクトリ内のオブジェクトとサブディレクトリをリストする
OSS にはフォルダの概念がありません。すべての要素はオブジェクトとして保存されます。フォルダを作成するには、スラッシュ (/) で終わるゼロバイトのオブジェクトを作成します。OSS コンソールでは、スラッシュ (/) で終わるオブジェクトがフォルダとして表示されます。
delimiter および prefix パラメーターを使用して、フォルダ機能をシミュレートできます。
prefixパラメーターをフォルダ名に設定すると、このプレフィックスで始まるすべてのオブジェクトがリストされます。これには、そのフォルダ内のすべてのオブジェクトとサブフォルダ、およびサブフォルダ内のすべてのオブジェクトが含まれます。delimiterパラメーターもスラッシュ (/) に設定すると、そのフォルダ内のオブジェクトとサブフォルダ名のみがリストされます。サブフォルダ内のオブジェクトはリストされません。
ObjectIteratorV2 (推奨)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# fun フォルダ内のオブジェクトとサブフォルダ名をリストしますが、サブフォルダ内のオブジェクトはリストしません。
print("List objects and subdirectories in the fun directory:")
for obj in oss2.ObjectIteratorV2(bucket, prefix='fun/', delimiter='/', start_after='fun/'):
# is_prefix メソッドを使用して、obj がフォルダであるかどうかを判断します。
if obj.is_prefix():
print(f"Subdirectory: {obj.key}")
else:
print(f"Object: {obj.key}")
if __name__ == "__main__":
main()期待される出力:
List objects and subdirectories in the fun directory:
Subdirectory: fun/movie/
Object: fun/test.jpgObjectIterator
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# fun フォルダ内のオブジェクトとサブフォルダ名をリストしますが、サブフォルダ内のオブジェクトはリストしません。
print("List objects and subdirectories in the fun directory:")
for obj in oss2.ObjectIterator(bucket, prefix='fun/', delimiter='/', marker='fun/'):
# is_prefix メソッドを使用して、obj がフォルダであるかどうかを判断します。
if obj.is_prefix():
print(f"Subdirectory: {obj.key}")
else:
print(f"Object: {obj.key}")
if __name__ == "__main__":
main()期待される出力:
List objects and subdirectories in the fun directory:
Subdirectory: fun/movie/
Object: fun/test.jpg特定の開始位置以降のオブジェクトをリストする
バケットに x1.txt、x2.txt、z1.txt、z2.txt の 4 つのオブジェクトが含まれていると仮定します。
ObjectIteratorV2 (推奨)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# x2.txt 以降のすべてのオブジェクトをリストします (x2.txt 自体は除きます)。
print("List all objects after x2.txt:")
for obj in oss2.ObjectIteratorV2(bucket, start_after="x2.txt"):
print(f"Object name: {obj.key}")
if __name__ == "__main__":
main()期待される出力:
List all objects after x2.txt:
Object name: z1.txt
Object name: z2.txtObjectIterator
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# x2.txt 以降のすべてのオブジェクトをリストします (x2.txt 自体は除きます)。
print("List all objects after x2.txt:")
for obj in oss2.ObjectIterator(bucket, marker="x2.txt"):
print(f"Object name: {obj.key}")
if __name__ == "__main__":
main()期待される出力:
List all objects after x2.txt:
Object name: z1.txt
Object name: z2.txt特定のディレクトリ内のオブジェクトのサイズを取得する
ObjectIteratorV2 (推奨)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def calculate_folder_size(bucket, folder):
"""指定されたフォルダの合計サイズを計算します。"""
total_size = 0
for obj in oss2.ObjectIteratorV2(bucket, prefix=folder):
total_size += obj.size
return total_size
def main():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# ルートディレクトリ内のすべてのオブジェクトとフォルダをリストし、そのサイズを表示します。
print("List the sizes of objects and folders in the root directory:")
for obj in oss2.ObjectIteratorV2(bucket, delimiter='/'):
if obj.is_prefix():
# フォルダの合計サイズを計算します。
folder_size = calculate_folder_size(bucket, obj.key)
print(f"Directory: {obj.key}, Size: {folder_size} bytes")
else:
# オブジェクトサイズを直接表示します。
print(f"Object: {obj.key}, Size: {obj.size} bytes")
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):
"""指定されたフォルダの合計サイズを計算します。"""
total_size = 0
for obj in oss2.ObjectIterator(bucket, prefix=folder):
total_size += obj.size
return total_size
def main():
# 環境変数からアクセス資格情報を取得します。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットのエンドポイントとリージョンを設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
region = "cn-hangzhou"
# バケットを初期化します。
bucket = oss2.Bucket(auth, endpoint, "example-bucket", region=region)
# ルートディレクトリ内のすべてのオブジェクトとフォルダをリストし、そのサイズを表示します。
print("List the sizes of objects and folders in the root directory:")
for obj in oss2.ObjectIterator(bucket, delimiter='/'):
if obj.is_prefix():
# フォルダの合計サイズを計算します。
folder_size = calculate_folder_size(bucket, obj.key)
print(f"Directory: {obj.key}, Size: {folder_size} bytes")
else:
# オブジェクトサイズを直接表示します。
print(f"Object: {obj.key}, Size: {obj.size} bytes")
if __name__ == "__main__":
main()