すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS SDK for Python 1.0 を使用したオブジェクトのリスト

最終更新日:Nov 01, 2025

Object Storage Service (OSS) SDK for Python は、バケット内のオブジェクトをリストするためのカプセル化されたイテレーターを提供します。これらのイテレーターを使用して、プレフィックス、開始位置、およびその他の基準でオブジェクトをフィルターできます。

使用方法

OSS SDK for Python は、オブジェクトをリスト表示するために、ObjectIteratorObjectIteratorV2 の 2 つのイテレーターを提供します。ObjectIteratorGetBucket (ListObjects) 操作に基づいており、ObjectIteratorV2ListObjectsV2 (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)

    クリックしてパラメーターの説明を表示

    パラメーター

    タイプ

    必須

    説明

    bucket

    oss2.Bucket

    はい

    初期化されたバケット。

    prefix

    str

    いいえ

    オブジェクト名をフィルターするプレフィックスを指定します。デフォルト値は空の文字列で、すべてのオブジェクトを返します。

    delimiter

    str

    いいえ

    フォルダ構造をシミュレートするために使用されるデリミタ。通常、スラッシュ (/) に設定されます。

    continuation_token

    str

    いいえ

    ページネーショントークン。最初のリクエストには空の文字列を渡します。後続のリクエストには、前の応答の next_continuation_token 値を使用します。

    start_after

    str

    いいえ

    ページ分割されたリスト操作の開始点を指定します。この操作は、名前が指定された文字列より辞書順で大きいすべてのオブジェクトを返します。バケット内に start_after と同じ名前のオブジェクトが存在する場合でも、結果には含まれません。

    fetch_owner

    bool

    いいえ

    結果にオーナー情報を含めるかどうかを指定します。有効な値:
    - True: オーナー情報を返します。
    - False (デフォルト): オーナー情報を返しません。

    max_keys

    int

    いいえ

    1 回の応答で返されるオブジェクトの最大数。デフォルトは 100、最大は 1000 です。

    max_retries

    int

    いいえ

    失敗したリクエストの最大再試行回数。

  • ObjectIterator コンストラクター

    oss2.ObjectIterator(bucket, prefix='', delimiter='', marker='', max_keys=100, max_retries=None, headers=None)

    クリックして パラメーターの説明を表示

    パラメーター

    タイプ

    必須

    説明

    bucket

    oss2.Bucket

    はい

    初期化された Bucket オブジェクト。

    prefix

    str

    いいえ

    オブジェクト名をフィルターするプレフィックスを指定します。デフォルト値は空の文字列で、すべてのオブジェクトを返します。

    delimiter

    str

    いいえ

    フォルダをシミュレートするために使用されるデリミタ。通常、スラッシュ (/) に設定されます。

    marker

    str

    いいえ

    ページ分割リストの開始位置。名前が指定された文字列より辞書順で大きいすべてのオブジェクトを返します。バケット内に marker と同じ名前のオブジェクトが存在する場合でも、結果には含まれません。

    max_keys

    int

    いいえ

    1 回のリクエストで返されるオブジェクトの最大数。デフォルト値は 100 です。最大値は 1000 です。

    max_retries

    int

    いいえ

    失敗したリクエストの最大再試行回数。

コード例

コードを実行する前に、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.jpgfun/test.jpgfun/movie/001.avifun/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.jpg

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)
    
    # 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.jpg

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)
    
    # 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.txtx2.txtz1.txtz2.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.txt

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)
    
    # 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()