使用python boto将文件从amazon s3中的一个文件夹传输到另一个文件夹

时间:2017-12-18 17:06:26

标签: python-3.x amazon-s3 boto boto3

我试图在同一个s3存储桶中将文件从一个文件夹传输到另一个文件夹但是我收到错误。我已经编写了下面的代码来将文件传输到另一个文件夹。

import boto
from boto.s3.connection import S3Connection
import boto.s3
import sys
from boto.s3.key import Key


conn = S3Connection('access key', 'secret key')
bucket = conn.get_bucket('bucket-name')
for file in bucket.list("2/", "/"):
    k = Key(bucket)
    print(k)
    k.key = '3'
    k.set_contents_from_filename(file)

我收到以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-34-4f81a952b1f1> in <module>()
     15     print(k)
     16     k.key = '3'
---> 17     k.set_contents_from_filename(file)
     18 
     19 

/Users/anaconda/lib/python3.6/site-packages/boto/s3/key.py in set_contents_from_filename(self, filename, headers, replace, cb, num_cb, policy, md5, reduced_redundancy, encrypt_key)
   1356         :return: The number of bytes written to the key.
   1357         """
-> 1358         with open(filename, 'rb') as fp:
   1359             return self.set_contents_from_file(fp, headers, replace, cb,
   1360                                                num_cb, policy, md5,

TypeError: expected str, bytes or os.PathLike object, not Key

是否有任何有效的方法可以使用python boto / boto3在同一个s3存储桶中将文件从一个文件夹传输到另一个文件夹。我在少量文件上测试它。实际上我有60gb数据,我必须分批传输1000个文件。

有人可以帮我这个吗?

由于

2 个答案:

答案 0 :(得分:0)

我建议为此目的使用boto3。 您可以轻松地将s3对象从一个文件夹复制到另一个文件夹。

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

您可以循环使用以上代码,并将其替换为您的密钥。 复制对象后,您可以使用相同的键从源文件夹中删除对象。

答案 1 :(得分:-1)

如果适用,请尝试以下代码:

=LARGE(B$2:B$6;1) for the largest
=LARGE(B$2:B$6;2) for the second largest
...