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

Object Storage Service:OSS SDK for Python 1.0 を使用してオブジェクトの名前を変更する

最終更新日:Aug 16, 2025

オブジェクトの名前を直接変更することはできません。バケット内のオブジェクトの名前を変更するには、CopyObject 操作を呼び出してソースオブジェクトをデスティネーションオブジェクトにコピーし、次に DeleteObject 操作を呼び出してソースオブジェクトを削除します。

使用上の注意

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

  • このトピックでは、アクセス認証情報は環境変数から取得されます。 アクセス認証情報を設定する方法の詳細については、「OSS SDK for Python 1.0 を使用してアクセス認証情報を設定する」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。

サンプルコード

次のコードは、examplebucket バケット内の srcobject.txt という名前のオブジェクトの名前を destobject.txt に変更する例を示しています。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# エンドポイントにマップするリージョンの ID を指定します。例: cn-hangzhou。署名アルゴリズム V4 を使用する場合は、このパラメーターが必要です。
region = "cn-hangzhou"

# バケットの名前を指定します。
bucket_name = 'examplebucket'
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)

# ソースオブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: srcobject.txt。
src_object_name = 'srcobject.txt'
# デスティネーションオブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: destobject.txt。
dest_object_name = 'destobject.txt'

# examplebucket 内の srcobject.txt オブジェクトを同じバケット内の destobject.txt オブジェクトにコピーします。
result = bucket.copy_object(bucket_name, src_object_name, dest_object_name)

# レスポンスを表示します。HTTP ステータスコード 200 が返された場合、操作は成功です。
print('result.status:', result.status)

# srcobject.txt オブジェクトを削除します。
result_del = bucket.delete_object(src_object_name)

# レスポンスを表示します。HTTP ステータスコード 204 が返された場合、操作は成功です。
print('result.status:', result_del.status)
説明

バケット内のディレクトリの名前も直接変更することはできません。バケット内のディレクトリの名前を変更するには、上記の例に従って、ディレクトリ内のサブディレクトリとオブジェクトの名前を 1 つずつ変更します。

関連情報

オブジェクトの名前を変更するために呼び出すことができる API 操作の詳細については、「CopyObject」および「DeleteObject」をご参照ください。