Как проверить, существует ли папка или нет в контейнере Azure с помощью Python?

#python #azure #azure-blob-storage

#питон #лазурный #azure-blob-хранилище

Вопрос:

У меня есть контейнер для хранения, и внутри него у меня есть 3 уровня каталогов, как показано ниже:

 --Container
  --Folder1
    --Folder2
      --Folder3
        --blobs here
 

Мне нужно проверить, присутствует ли какой-либо большой двоичный объект в папке 3 или, что еще лучше, просто проверьте, существует ли папка 3 или нет.
Я попытался использовать
blob_exist = BlobClient.from_connection_string(conn_str = os.getenv("conString"), container_name="Container",blob_name="Folder1/Folder2/Folder3").exists()

Он всегда возвращает False, независимо от того, существует папка или нет. Кто-нибудь может сказать мне, как я могу этого добиться?
Я знаю, что пустые папки не существуют в контейнерах больших двоичных объектов, но я намереваюсь проверить, существует ли папка, а затем продолжить другую бизнес-логику.

Комментарии:

1. Будет ли os.walk() работать на вас? Обратитесь к tutorialspoint.com/python/os_walk.htm

2. Можете ли вы решить проблему с помощью приведенного ниже ответа? если это поможет, не могли бы вы, пожалуйста, принять это как ответ?

Ответ №1:

Невозможно напрямую проверить, существует ли папка в хранилище больших двоичных объектов. Но вы можете использовать list_blobs() метод и name_starts_with параметр.

Например:

 from azure.storage.blob import BlobServiceClient

blob_service_client=BlobServiceClient.from_connection_string(connstr)
container_client = blob_service_client.get_container_client(container)
myblobs = container_client.list_blobs(name_starts_with="Folder1/Folder2/Folder3")

#define a list to store the blobs if exists
blob_list=[]

for s in myblobs:
    blob_list.append(s)
    #use break to make sure only one iteration to avoid iterating all the blobs
    break

if len(blob_list) > 0:
    print("yes")
else:
    print("no")
 

Комментарии:

1. Спасибо @Ivan Yang за решение. Это послужило моей цели.

Ответ №2:

Попробуйте:

 import os
def myfind( folder, container):
    for root, dirs, files in os.walk(container, topdown=False):
        if folder in dirs: return True
    return False

myfind('Folder3