В ведре aws-s3 перечислены ключи в формате иерархии - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь загрузить ключи из корзины s3, размещенной на aws.Ключи - только некоторые файлы .csv.Но эти файлы хранятся в подкаталогах внутри корзины s3.Когда я пытаюсь составить список для определенного имени файла, используя метод s3_client.list_objects-v2 (Bucket_name), я возвращаюсь с полной иерархией ключей и папок, в которых они присутствуют внутри корзины s3.Например, для bucket, bucket_1

file_name='my_file.csv'
resp=s2_client_conn.list_objects_v2(Bucket='bucket_1')
for obj in resp['Contents']:
   if file_name in obj['Key']:
        print(obj['Key'])

вывод:

sub_dir_1/sub_dir_2/my_csv_file.csv

Почему он не печатает имя файла?Имя ключа указывает на всю структуру каталогов для сегментов s3, в которых есть файлы, или что-то еще здесь отсутствует?

1 Ответ

0 голосов
/ 31 мая 2018

Почему не печатается имя файла?Это потому, что - это имя файла.

Amazon S3 - это служба хранения плоских объектов .Он не поддерживает папки / каталоги.

Однако он допускает / символов в ключах («имена файлов»).Существуют также различные вызовы, которые могут обрабатывать символы / как разделители для перечисления «подкаталогов» (которые на самом деле не существуют).

Например, вы можете сделать это с помощью Интерфейс командной строки AWS (CLI) :

aws s3 mb my-bucket

aws s3 cp foo s3://my-bucket/folder1/folder2/foo

Когда вы перейдете к списку сегментов, он будет действовать , как если бы folder1 и папка2 существует.Похоже, что папки были созданы, но это не так.Они просто предназначены для работы как традиционные иерархические каталоги.

Затем можно выполнить эту команду:

aws s3 rm s3://my-bucket/folder1/folder2/foo

Файл foo будет удален , а папки тоже исчезнут! Это потому, что они никогда не существовали.

Следовательно, ответ на ваш вопрос: Ключ (имя файла) - это полный путь к объекту, потому что пути на самом деле не существуют,Это просто имя.

Если вы хотите «избежать» этого, вам нужно будет манипулировать строками.Это может быть сделано довольно легко в Python, например:

print(obj['Key'].rsplit('/', 1)[-1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...