web-dev-qa-db-ja.com

Boto3 / S3:copy_objectを使用してオブジェクトの名前を変更する

python boto3を使用してs3バケット内のファイルの名前を変更しようとしていますが、引数を明確に理解できませんでした。ここで誰か助けてもらえますか?

私が計画しているのは、オブジェクトを新しいオブジェクトにコピーしてから、実際のオブジェクトを削除することです。

ここでも同様の質問を見つけましたが、boto3を使用したソリューションが必要です。

47
MikA

別の解決策を見つけました

s3 = boto3.resource('s3')
s3.Object('my_bucket','new_file_key').copy_from(CopySource='my_bucket/old_file_key')
s3.Object('my_bucket','old_file_key').delete()
70
MikA

S3でオブジェクトの名前を変更することはできません。したがって、指定したように、オブジェクトを新しい名前にコピーしてから古い名前を削除する必要があります。

client.copy_object(Bucket="BucketName", CopySource="BucketName/OriginalName", Key="NewName")
client.delete_object(Bucket="BucketName", Key="OriginalName")
42
Boto User

copy() メソッドの更新されたBoto3ドキュメントの例を次に示します。これはcopy_object()でも機能し、現在必要な構文であるように見えます。

copy_source = {'Bucket': 'source__bucket', 'Key': 'my_folder/my_file'}
s3.copy_object(CopySource = copy_source, Bucket = 'dest_bucket', Key = 'new_folder/my_file')
s3.delete_object(Bucket = 'source_bucket', Key = 'my_folder/my_file')

上記のリンクのドキュメントからの注意:

CopySource(dict)-ソースバケットの名前、ソースオブジェクトのキー名、およびソースオブジェクトのオプションのバージョンID。辞書の形式は次のとおりです。{'Bucket': 'bucket'、 'Key': 'key'、 'VersionId': 'id'}。 VersionIdキーはオプションであり、省略できます。

8
jpgard