проверьте, существует ли каталог или подкаталог в корзине в s3 с помощью boto3 - PullRequest
0 голосов
/ 23 марта 2020

У меня есть структура s3, например s3://my-bucket/data/2020/03/23/01/data.csv. Я хочу проверить, существует ли s3://my-bucket/data/2020/03/23.

Я могу проверить, существует ли файл CSV, но не могу его использовать, поскольку имя файла может измениться, поэтому я хочу проверить, существует ли папка.

1 Ответ

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

Это может быть невозможным, в зависимости от того, что вы ожидаете.

Во-первых, стоит отметить, что папки на самом деле не существуют в Amazon S3 .

Например, вы можете запустить эту команду, чтобы скопировать файл на S3:

aws s3 cp foo.txt s3://my-bucket/data/2020/03/23/

Это поместит файл в путь data/2020/03/23/, и эти четыре каталога будут «появляться» в консоли , но они на самом деле не существуют. Скорее, ключ (имя файла) объекта содержит полный путь .

Если вы затем удалите объект:

aws s3 rm s3://my-bucket/data/2020/03/23/foo.txt

, тогда четыре каталога будут "исчезнуть" (потому что они все равно не существовали).

Можно обмануть , нажав "Создать папку" в консоли управления S3. Это создаст объект нулевой длины с именем папки (фактически, с именем полного пути). Это приводит к тому, что каталог появляется в списке сегментов, но это только потому, что в этом пути существует объект.

В S3 каталоги называются CommonPrefixes, и можно использовать команды, которые ссылаются на префикс, вместо того, чтобы ссылаться на каталог.

Итак, вы можете перечислить сегмент, указав путь в качестве префикса. Затем будет возвращен список любых объектов, которые находятся в этом пути.

Однако лучший ответ: Просто притворитесь, что он существует, и все будет работать нормально.

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