全部產品
Search
文件中心

Object Storage Service:列舉儲存空間(Python SDK V2)

更新時間:Jul 31, 2025

本文介紹如何列舉當前帳號所有地區下符合指定條件的儲存空間。

注意事項

  • 本文範例程式碼以華東1(杭州)的地區IDcn-hangzhou為例,預設使用外網Endpoint,如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱

  • 本文以從環境變數讀取存取憑證為例。如何配置訪問憑證,請參見配置訪問憑證

  • 要列舉儲存空間,您必須具有oss:ListBuckets許可權。具體操作,請參見為RAM使用者授予自訂的權限原則.

  • 使用SDK列舉儲存空間時,可以通過指定資源群組ID來篩選特定資源群組下的Bucket。

    • 使用SDK列舉儲存空間時預設不攜帶資源群組ID參數,返回結果的XML裡也不會攜帶資源群組相關資訊。

    • 如果在請求中攜帶資源群組ID參數,則OSS會返回屬於該資源群組的所有Bucket。

    • 如果在請求中未攜帶資源群組ID參數,則OSS會返回要求者擁有的所有Bucket。

範例程式碼

您可以使用以下代碼列舉當前帳號所有地區下的儲存空間。

import argparse
import alibabacloud_oss_v2 as oss

# 建立命令列參數解析器,並描述指令碼用途:樣本展示如何列出OSS中的所有儲存空間
parser = argparse.ArgumentParser(description="list buckets sample")

# 添加命令列參數 --region,表示儲存空間所在的地區,必需參數
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 添加命令列參數 --endpoint,表示其他服務可用來訪問OSS的網域名稱,非必需參數
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令列提供的參數,擷取使用者輸入的值
    args = parser.parse_args()

    # 從環境變數中載入訪問OSS所需的認證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK的預設配置建立設定物件,並設定認證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # 如果提供了自訂endpoint,則更新設定物件中的endpoint屬性
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用上述配置初始化OSS用戶端,準備與OSS互動
    client = oss.Client(cfg)

    # 建立ListBuckets操作的分頁器(Paginator),以便處理大量儲存空間
    paginator = client.list_buckets_paginator()

    # 遍曆分頁結果
    for page in paginator.iter_page(oss.ListBucketsRequest()):
        # 對於每一頁中的每一個儲存空間,列印其名稱、位置、建立日期
        for o in page.buckets:
            print(f'Bucket: {o.name}, Location: {o.location}, Created: {o.creation_date}')

# 當此指令碼被直接執行時,調用main函數開始處理邏輯
if __name__ == "__main__":
    main()  # 指令碼進入點,控製程序流程從這裡開始

常見使用情境

列舉指定首碼的儲存空間

您可以使用以下代碼列舉當前帳號所有地區下,以example為首碼(prefix)的儲存空間。

import argparse
import alibabacloud_oss_v2 as oss

# 建立命令列參數解析器,並描述指令碼用途:樣本展示如何列出OSS中的所有儲存空間
parser = argparse.ArgumentParser(description="list buckets sample")

# 添加命令列參數 --region,表示儲存空間所在的地區,必需參數
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 添加命令列參數 --endpoint,表示其他服務可用來訪問OSS的網域名稱,非必需參數
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令列提供的參數,擷取使用者輸入的值
    args = parser.parse_args()

    # 從環境變數中載入訪問OSS所需的認證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK的預設配置建立設定物件,並設定認證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # 如果提供了自訂endpoint,則更新設定物件中的endpoint屬性
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用上述配置初始化OSS用戶端,準備與OSS互動
    client = oss.Client(cfg)

    # 建立ListBuckets操作的分頁器(Paginator),以便處理大量儲存空間
    paginator = client.list_buckets_paginator()

    # 遍曆分頁結果
    for page in paginator.iter_page(oss.ListBucketsRequest(
        prefix='example', # 指定首碼,以便只列出以"example"開頭的儲存空間
        ),
    ):
        # 對於每一頁中的每一個儲存空間,列印其名稱、位置、建立日期
        for o in page.buckets:
            print(f'Bucket: {o.name}, Location: {o.location}, Created: {o.creation_date}')

# 當此指令碼被直接執行時,調用main函數開始處理邏輯
if __name__ == "__main__":
    main()  # 指令碼進入點,控製程序流程從這裡開始

列舉指定marker之後的儲存空間

您可以使用以下代碼列舉當前帳號所有地區下,名稱的字母序排在example-bucket之後的儲存空間。

import argparse
import alibabacloud_oss_v2 as oss

# 建立命令列參數解析器,並描述指令碼用途:樣本展示如何列出OSS中的所有儲存空間
parser = argparse.ArgumentParser(description="list buckets sample")

# 添加命令列參數 --region,表示儲存空間所在的地區,必需參數
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 添加命令列參數 --endpoint,表示其他服務可用來訪問OSS的網域名稱,非必需參數
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令列提供的參數,擷取使用者輸入的值
    args = parser.parse_args()

    # 從環境變數中載入訪問OSS所需的認證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK的預設配置建立設定物件,並設定認證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # 如果提供了自訂endpoint,則更新設定物件中的endpoint屬性
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用上述配置初始化OSS用戶端,準備與OSS互動
    client = oss.Client(cfg)

    # 建立ListBuckets操作的分頁器(Paginator),以便處理大量儲存空間
    paginator = client.list_buckets_paginator()

    # 遍曆分頁結果
    for page in paginator.iter_page(oss.ListBucketsRequest(
        marker="example-bucket", # 名稱字母序排在example-bucket之後的儲存空間
        ),
    ):
        # 對於每一頁中的每一個儲存空間,列印其名稱、位置、建立日期
        for o in page.buckets:
            print(f'Bucket: {o.name}, Location: {o.location}, Created: {o.creation_date}')

# 當此指令碼被直接執行時,調用main函數開始處理邏輯
if __name__ == "__main__":
    main()  # 指令碼進入點,控製程序流程從這裡開始

列舉指定個數的儲存空間

您可以使用以下代碼列舉當前帳號所有地區下的儲存空間,並指定每次分頁返回的最大數量。

import argparse
import alibabacloud_oss_v2 as oss

# 建立命令列參數解析器,並描述指令碼用途:樣本展示如何列出OSS中的所有儲存空間
parser = argparse.ArgumentParser(description="list buckets sample")

# 添加命令列參數 --region,表示儲存空間所在的地區,必需參數
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 添加命令列參數 --endpoint,表示其他服務可用來訪問OSS的網域名稱,非必需參數
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令列提供的參數,擷取使用者輸入的值
    args = parser.parse_args()

    # 從環境變數中載入訪問OSS所需的認證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK的預設配置建立設定物件,並設定認證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # 如果提供了自訂endpoint,則更新設定物件中的endpoint屬性
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用上述配置初始化OSS用戶端,準備與OSS互動
    client = oss.Client(cfg)

    # 建立ListBuckets操作的分頁器(Paginator),以便處理大量儲存空間
    paginator = client.list_buckets_paginator()

    # 遍曆分頁結果,每一頁包含一定數量的儲存空間
    for page in paginator.iter_page(oss.ListBucketsRequest(
        max_keys=10, # 每頁最多返回10個儲存空間
        ),
    ):
        # 對於每一頁中的每一個儲存空間,列印其名稱、位置、建立日期
        for o in page.buckets:
            print(f'Bucket: {o.name}, Location: {o.location}, Created: {o.creation_date}')

# 當此指令碼被直接執行時,調用main函數開始處理邏輯
if __name__ == "__main__":
    main()  # 指令碼進入點,控製程序流程從這裡開始

列舉指定資源群組ID下的所有儲存空間

  1. 使用SDK列舉儲存空間時預設不攜帶資源群組ID參數,返回結果的XML裡也不會攜帶資源群組相關資訊。

  2. 如果在請求參數中指定資源群組ID參數resource_group_id,則OSS會返回屬於該資源群組的所有Bucket。

  3. 如果在請求參數中未指定資源群組ID參數resource_group_id,則OSS會返回要求者擁有的所有Bucket。

import argparse
import alibabacloud_oss_v2 as oss

# 建立命令列參數解析器,並描述指令碼用途:樣本展示如何列出OSS中的所有儲存空間
parser = argparse.ArgumentParser(description="list buckets sample")

# 添加命令列參數 --region,表示儲存空間所在的地區,必需參數
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 添加命令列參數 --endpoint,表示其他服務可用來訪問OSS的網域名稱,非必需參數
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令列提供的參數,擷取使用者輸入的值
    args = parser.parse_args()

    # 從環境變數中載入訪問OSS所需的認證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK的預設配置建立設定物件,並設定認證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # 如果提供了自訂endpoint,則更新設定物件中的endpoint屬性
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用上述配置初始化OSS用戶端,準備與OSS互動
    client = oss.Client(cfg)

    # 建立ListBuckets操作的分頁器(Paginator),以便處理大量儲存空間
    paginator = client.list_buckets_paginator()

    # 遍曆分頁結果,每一頁包含一定數量的儲存空間
    for page in paginator.iter_page(oss.ListBucketsRequest(
        max_keys=10, # 每頁最多返回10個儲存空間
        resource_group_id="rg-aek27tc********", # 列出指定資源群組ID下的儲存空間
        ),
    ):
        # 對於每一頁中的每一個儲存空間,列印其名稱、位置、建立日期和資源群組ID
        for o in page.buckets:
            print(f'Bucket: {o.name}, Location: {o.location}, Created: {o.creation_date}, Resource Group ID: {o.resource_group_id}')

# 當此指令碼被直接執行時,調用main函數開始處理邏輯
if __name__ == "__main__":
    main()  # 指令碼進入點,控製程序流程從這裡開始

相關文檔

  • 關於列舉儲存空間的完整範例程式碼,請參見list_buckets.py