рекурсивное копирование данных из s3 с изменением структуры папок с помощью python boto3 - PullRequest
0 голосов
/ 17 октября 2018

У меня есть данные в s3 sr = ab / pt = 01 / pt = 02 / pt = 03, которые несколько папок.под pt = 03 содержатся все данные.

`
old_bucket_name = 'bucket'
old_prefix = 'sr=ab/pt=01/pt=02/pt=03'
new_bucket_name = 'bucket'
new_prefix = old_prefix.split("=")[3].strip()
s3 = boto3.resource('s3')
old_bucket = s3.Bucket(old_bucket_name )
new_bucket = s3.Bucket(new_bucket_name )
for obj in old_bucket.objects.filter(Prefix=old_prefix):
  old_source = { 'Bucket': old_bucket_name,
                 Key': obj.key}
  new_key = obj.key.replace(old_prefix, new_prefix)
  new_obj = new_bucket.Object(new_key)
  new_obj.copy(old_source)`

Я получаю следующий вывод

03/list of files

Я ожидаю что-то вроде следующего

ab/01/02/03    
ab/01/03/00    
ab/01/03/01    
ab/01/03/02

1 Ответ

0 голосов
/ 17 октября 2018

Очевидно, вы хотите переформатировать префикс с

sr=ab/pt=01/pt=02/pt=03 до ab/01/02/03

И, кажется, вы просто копируете чей-то код, не зная функцию python.

Я предполагаю, что передняя часть знака = случайна, я не буду использовать ярлык, сохраняя разделитель "/".Так что требуется многократное объединение.

old_prefix = 'sr=ab/pt=01/pt=02/pt=03'
step1 = old_prefix.split('/') 
step2 = [x.split('=')[1] for x in step1]
new_prefix = "/".join(step2)

Вы можете сделать приведенный выше код более простым.

new_prefix = "/".join([x.split('=')[1] for x in old_prefix.split('/')])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...