如何使用python boto3将s3对象从一个桶复制到另一个桶

时间:2017-11-24 07:17:56

标签: python amazon-web-services amazon-s3 boto3

我想将文件从一个s3存储桶复制到另一个存储桶。我收到以下错误:

  

s3.meta.client.copy(源,目标寄存器)
  TypeError:copy()至少需要4个参数(给定3个)

我无法通过阅读文档找到解决方案。这是我的代码:

#!/usr/bin/env python
import boto3
s3 = boto3.resource('s3')
source= { 'Bucket' : 'bucketname1','Key':'objectname'}
dest ={ 'Bucket' : 'Bucketname2','Key':'backupfile'}
s3.meta.client.copy(source,dest)

3 个答案:

答案 0 :(得分:18)

您可以尝试:

import boto3
s3 = boto3.resource('s3')
copy_source = {
      'Bucket': 'mybucket',
      'Key': 'mykey'
    }
bucket = s3.Bucket('otherbucket')
bucket.copy(copy_source, 'otherkey')

import boto3
s3 = boto3.resource('s3')
copy_source = {
    'Bucket': 'mybucket',
    'Key': 'mykey'
 }
s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey')

请注意参数的差异

答案 1 :(得分:1)

由于您使用的是s3服务资源,为什么不一直使用自己的copy method

#!/usr/bin/env python
import boto3
s3 = boto3.resource('s3')
source= { 'Bucket' : 'bucketname1', 'Key': 'objectname'}
dest = s3.Bucket('Bucketname2')
dest.copy(source, 'backupfile')

答案 2 :(得分:0)

这是docs的语法

import boto3
s3 = boto3.resource('s3')
copy_source = {
'Bucket': 'mybucket',
'Key': 'mykey'
}
s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey')

你必须单独给出分离桶和钥匙。 http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.copy