python 에서 blob을 찾을 시 Container Client의 list_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']
즉 Parameter의 Name과 같이 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']
해당 Blob의 Path를 또한 포함하기 때문에(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을 여러 개를 동시에 삭제할 수 있다.
'Cloud > Azure' 카테고리의 다른 글
Azure Synapse Analytics 권한 및 Copy into 권한 처리 (0) | 2021.06.22 |
---|---|
Azure Synapse Analytics SQL Pool에 Bulk Insert (0) | 2021.06.02 |
Azure Databricks (0) | 2021.04.21 |
Azure Data Factory - Linked Server 및 Trigger (0) | 2021.04.20 |
Azure Data Factory - Data Flow (0) | 2021.04.20 |
최근댓글