#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