我试图在同一个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个文件。
有人可以帮我这个吗?
由于
答案 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
...