使用Boto3 Python将文件从一个s3文件夹传输到另一个s3文件夹

时间:2020-01-23 12:42:41

标签: amazon-s3 aws-lambda boto3

我正在尝试将文件从一个s3存储桶复制到另一个文件,并在目标路径中进行了一些修改。

原始脚本如下:

import boto3
import os
old_bucket_name = 'XT01-sample-data'
old_prefix = 'Test/'
new_bucket_name = 'XT02-sample-data2'
new_prefix = old_bucket_name + '/' + old_prefix
s3 = boto3.resource('s3')
ENCRYPTION = os.environ.get('SERVER_SIDE_ENCRYPTION', 'AES256')
STORAGE_CLASS = os.environ.get('STORAGE_CLASS', 'INTELLIGENT_TIERING')
old_bucket = s3.Bucket(old_bucket_name)
new_bucket = s3.Bucket(new_bucket_name)
extra_args = {
                'ServerSideEncryption': ENCRYPTION,
                'StorageClass': STORAGE_CLASS
              }

for obj in old_bucket.objects.filter(Prefix=old_prefix):
    old_source = { 'Bucket': old_bucket_name,
                   'Key': obj.key}
    # replace the prefix
    new_key = obj.key.replace(old_prefix, new_prefix, 1)
    new_obj = new_bucket.Object(new_key)
    print("Object old ", obj)
    print("new_key ", new_key)
    print("new_obj ", new_obj)
    new_obj.copy(old_source,ExtraArgs=extra_args)

print("Starting Deletion Loop")
bucket = s3.Bucket(old_bucket_name)
bucket.objects.filter(Prefix=old_prefix).delete()

上面的脚本正在从存储区XT01-sample-data,Folder Test /中复制文件 到具有新路径XT01-sample-data / Test1 /

的新存储区XT02-sample-data2

现在要求修改脚本以在目标路径中添加时间戳,并且来自一个文件夹的文件将位于一次时间戳之下。

例如: 我们在源存储桶中的各个文件夹下都有以下文件

XT01-sample-data/Test1/Test1.1/File1.csv
XT01-sample-data/Test1/Test1.1/File2.csv
XT01-sample-data/Test1/Test1.1/File3.csv
XT01-sample-data/Test1/Test1.2/File1.2.1.csv
XT01-sample-data/Test1/Test1.2/File1.2.2.csv
XT01-sample-data/Test1/Test1.3/File1.3.csv
XT01-sample-data/Test1/Test2/Test2.1/File2.1.csv

预期的输出应该是一个子文件夹中的所有文件都应置于一个时间戳下。 并非所有文件都应放置在一个时间戳中,应该基于毫秒级别的时间戳(unix时间戳)进行隔离


对于文件夹Test1 / Test1.1下的文件

XT01-sample-data/Test1/2020/01/23/0000/File1.csv
XT01-sample-data/Test1/2020/01/23/0000/File2.csv
XT01-sample-data/Test1/2020/01/23/0000/File3.csv

对于文件夹Test1 / Test1.2下的文件

XT01-sample-data/Test1/2020/01/23/0003/File1.2.1.csv
XT01-sample-data/Test1/2020/01/23/0003/File1.2.2.csv

对于文件夹Test1 / Test1.3下的文件

XT01-sample-data/Test1/2020/01/23/0004/File1.3.csv

对于文件夹Test1 / Test2 / Test2.1下的文件

XT01-sample-data/Test1/2020/01/23/0005/File2.1.csv

1 个答案:

答案 0 :(得分:0)

我能够通过在dynamodb表中进行输入来解决此问题。 逻辑:

 as soon as the first instance is encountered then entry is made in dynamodb table.

在遇到下一个实例时,在复制数据之前在dynamodb表中进行相应的检查,并获取dynamodb中存在的相同日期。

相关问题