Azure Blob 위치 검색과 삭제

Cloud/Azure / /
728x90

python 에서 blob을 찾을 시 Container Clientlist_blobs Method를 이용하여 전체 Blob 리스트 중에 해당 blob file을 찾아 삭제를 한다.

그런데 적은 용량의 여러 개의 대량 파일을 올리다 보면 해당 파일을 찾기 위해 기존의 예제를 통하게 되면 매우 오랜 시간이 걸리게 되어 있다.

(기존의 예제 https://yhjin.tistory.com/11 Python 다운로드)

해당 파일의 정확한 패스를 알고 있다면 아래의 방법으로 그 시간을 대폭 줄일 수 있다.


해당과 같이 Blob이 존재한다고 했을 시에 다음과 같이 사용이 가능하다.

from azure.storage.blob import BlobServiceClient

from azure.storage.blob import ContainerClient

 

connection_string='<Conntection String>'

container_name='<Container Name>'

blob_service_client = 

BlobServiceClient.from_connection_string(connection_string)

container_client = blob_service_client.get_container_client(container_name)

 

file_path='test/test01/test02/'

get_list = list()

for blob in container_client.list_blobs(name_starts_with=file_path):

    get_list.append(blob.name)

 

print(get_list)

 

다음과 같이 print 된다.

['test/test01/test02/1.txt''test/test01/test02/2.txt''test/test01/test02/3.txt''test/test01/test02/4.txt']

 

ParameterName과 같이 Container 이하 path를 알면 모두 조회가 가능한 것이다.

다른 예제로 아래와 같은 파일도 같이 있다고 할 때 상위 Path만 입력하여 조회가 가능하다.


 


 

from azure.storage.blob import BlobServiceClient

from azure.storage.blob import ContainerClient

 

connection_string='<Conntection String>'

container_name='<Container Name>'

blob_service_client = 

BlobServiceClient.from_connection_string(connection_string)

container_client = blob_service_client.get_container_client(container_name)

 

file_path='test/'

get_list = list()

for blob in container_client.list_blobs(name_starts_with=file_path):

    get_list.append(blob.name)

 

print(get_list)

 

결과는 다음과 같다.

['test/test01''test/test01/test02''test/test01/test02/1.txt''test/test01/test02/2.txt'

'test/test01/test02/3.txt''test/test01/test02/4.txt''test/test03''test/test03/5.txt'

'test/test03/6.txt''test/test03/test04''test/test03/test04/7.txt''test/test03/test04/8.txt']

 

해당 BlobPath를 또한 포함하기 때문에(Object Storage에서는 Path 또한 객체) 확장자명을 이용하여 해당 Blob file을 찾아 사용이 가능하다.

 

또한 이전에 설명하지 못한 삭제 부분은 다음과 같이 가능하다.

 

from azure.storage.blob import BlobServiceClient

from azure.storage.blob import ContainerClient

 

connection_string='<Conntection String>'

container_name='<Container Name>'

blob_service_client = 

BlobServiceClient.from_connection_string(connection_string)

container_client = blob_service_client.get_container_client(container_name)

 

file_path='test/'

get_list = list()

for blob in container_client.list_blobs(name_starts_with=file_path):

    get_list.append(blob)

 

container_client.delete_blobs(*get_list)

 

해당 리스트는 blob을 여러 개를 동시에 삭제할 수 있다.

https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/storage/azure-storage-blob/samples/blob_samples_batch_delete_blobs.py

https://docs.microsoft.com/ko-kr/python/api/azure-storage-blob/azure.storage.blob.containerclient?view=azure-python#delete-blobs--blobs----kwargs-

 

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기