Перенос файлов из одной папки s3 в другую папку s3 с помощью Boto3 Python - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь скопировать файлы из одной корзины 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, папка Test / в новую корзину XT02-sample-data2 с новым путем XT01-sample-data / Test1 /

Теперь требуется изменить сценарий для добавления отметки времени в месте назначения путь и файлы из одной папки попадают под разовую отметку времени.

Например: у нас есть файлы ниже в исходной корзине в разных папках

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 голосов
/ 08 февраля 2020

Мне удалось решить эту проблему, сделав запись в таблице DynamodB. Logi c:

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

при обнаружении следующего экземпляра выполняется соответствующая проверка в таблице DynamodB перед копированием данных, и берется та же дата, которая присутствует в DynamodB.

...