Python Boto3 - как сбросить «папку» и переименовать другую? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть эти пути в S3:

s3://mykey/mytest/file1.txt
s3://mykey/mytest/file2.txt
s3://mykey/mytest/file3.txt

и

s3://mykey/mytest_temp/file4.txt
s3://mykey/mytest_temp/file5.txt
s3://mykey/mytest_temp/file6.txt

Хотите удалить s3://mykey/mytest/ (и все файлы в нем)
и затем переименовать s3://mykey/mytest_temp/ до s3://mykey/mytest/, сохраняя при этом все файлы (file4, file5, file6).


Окончательный результат должен быть - только 1 folder:

s3://mykey/mytest/file4.txt
s3://mykey/mytest/file5.txt
s3://mykey/mytest/file6.txt

Как этого добиться с помощью Python Boto3?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Чтобы сделать это исключительно из Python с помощью boto3, вам необходимо выполнить следующее:

Удаление существующей «папки»

  • Вызов list_objects_v2(), передавая префикс для получения списка каталога
  • Получите результаты и передайте имена объектов в delete_objects() вызов

Обратите внимание, что каждый из этих вызовов API обрабатывает до 1000 объектов каждый. Если у вас более 1000 объектов, вам нужно разбить результаты на страницы, вызывая их снова.

«Переименование» объектов

Amazon S3 не имеет «переименования» командовать Вместо этого необходимо будет скопировать каждый объект в новый ключ, затем удалить исходный объект.

  • Позвонить list_objects_v2(), передавая Префикс для получения списка каталога
  • L oop через каждый объект и:
    • Вызов copy_object(), указав полный путь в ключе назначения
    • вызов delete_object() после копирования объекта
0 голосов
/ 13 марта 2020

API AWS позволяет одновременно выполнять только один объект. Кроме того, здесь нет команды «переместить», поэтому вам нужно будет выполнить «Копирование» и «Удалить».

Самый простой способ сделать то, что вы просите, - это использовать интерфейс командной строки AWS. (CLI) , потому что у него есть команды более высокого уровня, которые могут легко это сделать:

aws rm --recursive s3://mykey/mytest/
aws mv s3://mykey/mytest_temp/ s3://mykey/mytest/

Если вы не хотите использовать CLI AWS, вы можете закодировать эту операцию с помощью boto но вам нужно будет l oop пройти через каждый объект и обработать его индивидуально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...