【发布时间】:2020-06-04 07:58:25
【问题描述】:
我的问题与上一个copy files from one AWS/S3 bucket to another bucket on databricks 有关。 我创建了一个新线程,因为这个问题与上一个问题不同。
这个帖子AWS S3 copy files and folders between two buckets对我没有帮助。
我需要通过 databricks 上的 python 将一些文件从一个 AWS/S3 存储桶/文件夹复制到另一个 AWS/S3 存储桶文件夹。
我的源 S3 存储桶/文件夹如下:
source_s3_bucket
folder_name1
folder_name2
folder_name3
folder_name4
deepest_folder_name
file1
file2
....
file11500
目标 s3 存储桶/文件夹:
destination_s3_bucket
dest_folder_name1
dest_folder_name2
dest_folder_name3
deepest_folder_name (this folder name must be exactly same as the source one "deepest_folder_name")
file1
file2
....
file11500
此外,“dest_folder_nameX”与源文件夹不同,源文件夹和目标文件夹的深度也不同。但是,源存储桶中最深的文件夹名称必须保留在目标存储桶中。
所有文件必须完全复制并保持相同的名称。
我已经尝试过python3编码:
import boto3
s3 = boto3.client('s3')
s3_resource = boto3.resource('s3')
for key in s3.list_objects(Bucket=source_bucket, Prefix=source_prefix)['Contents']:
files = key['Key']
copy_source = {'Bucket': source_bucket,'Key': files}
s3_resource.meta.client.copy(CopySource=copy_source, Bucket=dest_bucket, Key=dest_prefix)
但是,没有文件被复制到目标文件夹以及如何保留“deepest_folder_name”?
更新 “最深的文件夹”意味着我必须保留该层的子文件夹的名称并将它们和其中的文件复制到目的地。
例如, 在源存储桶中:
folder_name_abc
folder_name_dfr
folder_name_typ # this folder names must be kept
file1
file2
In destination bucket:
folder_name_typ # this folder names must be exactly same as the source
file1
file2
谢谢
【问题讨论】:
-
Amazon S3 复制命令只会复制一个对象。指定目标时,请提供目标对象(不仅仅是目录)的完整密钥。此外,您似乎在
s3_resource.meta.client.copy中混淆了资源和客户端 —copy()方法适用于资源,但您提供的参数看起来像是来自copy_object(),这是一个客户端调用。我不明白您对“最深文件夹”的要求。 -
“最深的文件夹”意味着我必须保留子文件夹的名称并将它们和其中的文件复制到目的地。请参阅 OP 中的更新。谢谢
标签: python amazon-web-services amazon-s3