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

Object Storage Service:ファイル名の変更 (Python SDK V2)

最終更新日:Nov 09, 2025

OSS は、オブジェクトの直接的な名前変更をサポートしていません。同じバケット内のオブジェクトの名前を変更するには、CopyObject 操作を使用して、ソースオブジェクトを新しい名前の宛先オブジェクトにコピーします。

注意事項

  • このトピックのサンプルコードでは、中国 (杭州) リージョン (cn-hangzhou) のパブリックエンドポイントを例として使用しています。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用する必要があります。OSS のリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。

サンプルコード

シンプルコピー (CopyObject) メソッドを使用したファイル名の変更

シンプルコピー CopyObject メソッドを使用してファイル名を変更できます。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="copy object sample")

# バケットが配置されているリージョンを指定する --region コマンドライン引数を追加します。これは必須パラメーターです。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 宛先バケットの名前を指定する --bucket コマンドライン引数を追加します。これは必須パラメーターです。
parser.add_argument('--bucket', help='The name of the destination bucket.', required=True)
# 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定する --endpoint コマンドライン引数を追加します。これはオプションのパラメーターです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# 宛先オブジェクトの名前を指定する --key コマンドライン引数を追加します。これは必須パラメーターです。
parser.add_argument('--key', help='The name of the destination object.', required=True)
# ソースオブジェクトの名前を指定する --source_key コマンドライン引数を追加します。これは必須パラメーターです。
parser.add_argument('--source_key', help='The name of the source object.', required=True)
# ソースバケットの名前を指定する --source_bucket コマンドライン引数を追加します。これは必須パラメーターです。
parser.add_argument('--source_bucket', help='The name of the source bucket.', required=True)

def main():
    # コマンドライン引数を解析します。
    args = parser.parse_args()

    # ID 検証のために環境変数から認証情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を読み込み、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 設定でリージョンを設定します。
    cfg.region = args.region

    # エンドポイントが指定されている場合は、設定でエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 指定された設定で OSS クライアントを作成します。
    client = oss.Client(cfg)

    # オブジェクトをコピーするリクエストを送信します。
    result = client.copy_object(oss.CopyObjectRequest(
        bucket=args.bucket,  # 宛先バケットの名前を指定します。
        key=args.key,  # 宛先オブジェクトのキーを指定します。
        source_key=args.source_key,  # ソースオブジェクトのキーを指定します。
        source_bucket=args.source_bucket,  # ソースバケットの名前を指定します。
    ))
    
    # 元のオブジェクトを削除します。
    client.delete_object(oss.DeleteObjectRequest(
        bucket=args.source_bucket,
        key=args.source_key
    ))

    # コピー操作の結果を出力します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' version id: {result.version_id},'
          f' hash crc64: {result.hash_crc64},'
          f' source version id: {result.source_version_id},'
          f' server side encryption: {result.server_side_encryption},'
          f' server side data encryption: {result.server_side_data_encryption},'
          f' last modified: {result.last_modified},'
          f' etag: {result.etag},'
    )

# スクリプトが直接実行されたときに main 関数を呼び出します。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。

コピーマネージャー (Copier) を使用したファイル名の変更

次のコードは、コピーマネージャーの Copier.Copy メソッドを使用してファイル名を変更する方法を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="copier sample")

# バケットが配置されているリージョンを指定する --region コマンドライン引数 (必須) を追加します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)

# 宛先バケットの名前を指定する --bucket コマンドライン引数 (必須) を追加します。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)

# OSS にアクセスするためのエンドポイントを指定する --endpoint コマンドライン引数 (オプション) を追加します。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

# 宛先オブジェクトの名前を指定する --key コマンドライン引数 (必須) を追加します。
parser.add_argument('--key', help='The name of the object.', required=True)

# ソースオブジェクトの名前を指定する --source_key コマンドライン引数 (必須) を追加します。
parser.add_argument('--source_key', help='The name of the source address for object.', required=True)

# ソースバケットの名前を指定する --source_bucket コマンドライン引数 (必須) を追加します。
parser.add_argument('--source_bucket', help='The name of the source address for bucket.', required=True)


def main():
    # コマンドライン引数を解析します。
    args = parser.parse_args()

    # 環境変数から認証情報を読み込みます。
    # EnvironmentVariableCredentialsProvider を使用して、環境変数からアクセスキー ID とアクセスキーシークレットを読み取ります。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を使用します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider  # 認証情報プロバイダーを設定します。
    cfg.region = args.region  # バケットが配置されているリージョンを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint  # エンドポイントが指定されている場合は、カスタムエンドポイントを設定します。

    # OSS クライアントインスタンスを作成します。
    client = oss.Client(cfg)

    # Copier インスタンスを作成し、オブジェクトをコピーします。
    copier = client.copier()

    # オブジェクトをコピーします。
    result = copier.copy(
        oss.CopyObjectRequest(
            bucket=args.bucket,          # 宛先バケットの名前。
            key=args.key,                # 宛先オブジェクトの名前。
            source_bucket=args.source_bucket,  # ソースバケットの名前。
            source_key=args.source_key   # ソースオブジェクトの名前。
        )
    )

    # コピー結果を出力します。
    # vars(result) を使用して結果オブジェクトを辞書に変換し、出力します。
    print(vars(result))


if __name__ == "__main__":
    main()

関連ドキュメント

  • シンプルコピーメソッドを使用してファイル名を変更する完全なサンプルコードについては、「copy_object.py」をご参照ください。

  • コピーマネージャーを使用してファイル名を変更する完全なサンプルコードについては、「copier.py」をご参照ください。