使用 python 从 azure 容器本地下载所有 blob 文件
Download all blobs files locally from azure container using python
我在 visual studio 中使用 python 3.6,我想从我的 Azure 容器中的单个文件夹中下载所有 blob 文件。这是我的代码,但问题是,它在文件夹中下载了 1 个 blob 文件,然后在下载第二个文件时覆盖了第一个文件,最后我的本地文件夹中只有最后一个 blob。如何将所有 blob 文件一次下载到一个文件夹中?
from azure.storage.blob import BlockBlobService
block_blob_service = BlockBlobService(account_name=ACCOUNT_NAME, account_key=ACCOUNT_KEY)
generator = block_blob_service.list_blobs(CONTAINER_NAME)
for blob in generator:
block_blob_service.get_blob_to_path(CONTAINER_NAME, blob.name, LOCAL_FILE)
根据我的理解,我认为有两种解决方案可以满足您的需求。
从容器中下载所有blob,并通过get_blob_to_bytes
或get_blob_to_stream
方法将这些blob内容写入单个文件,请看我的示例代码如下。
from azure.storage.blob import BlockBlobService
block_blob_service = BlockBlobService(account_name=ACCOUNT_NAME, account_key=ACCOUNT_KEY)
generator = block_blob_service.list_blobs(CONTAINER_NAME)
fp = open('<your-local-file-name>', 'ab')
for blob in generator:
# Using `get_blob_to_bytes`
b = service.get_blob_to_bytes(container_name, blob.name)
fp.write(b.content)
# Or using `get_blob_to_stream`
# service.get_blob_to_stream(container_name, blob.name, fp)
fp.flush()
fp.close()
从一个容器中下载所有blob,并通过方法get_blob_to_bytes
将这些blob写入一个zip文件,请看下面我的示例代码。
from azure.storage.blob import BlockBlobService
import zipfile
block_blob_service = BlockBlobService(account_name=ACCOUNT_NAME, account_key=ACCOUNT_KEY)
generator = block_blob_service.list_blobs(CONTAINER_NAME)
zf = zipfile.ZipFile(CONTAINER_NAME+'.zip',
mode='w',
compression=zipfile.ZIP_DEFLATED,
)
for blob in generator:
b = service.get_blob_to_bytes(container_name, blob.name)
zf.writestr(blob.name, b.content)
zf.close()
希望对您有所帮助。如有任何疑问,请随时告诉我。
在 azure-storage-blob 版本 12.9.0
中,我使用了以下脚本:
from azure.storage.blob import BlobServiceClient
import zipfile
conn_str = ''
block_blob_service = BlobServiceClient.from_connection_string(conn_str)
generator = block_blob_service.get_container_client(container_name)
my_blobs = generator.list_blobs()
zf = zipfile.ZipFile("data"+'.zip', mode='w', compression=zipfile.ZIP_DEFLATED)
for blob in my_blobs:
bytes = generator.get_blob_client(blob.name).download_blob().readall()
zf.writestr(blob.name, bytes)
zf.close()
我在 visual studio 中使用 python 3.6,我想从我的 Azure 容器中的单个文件夹中下载所有 blob 文件。这是我的代码,但问题是,它在文件夹中下载了 1 个 blob 文件,然后在下载第二个文件时覆盖了第一个文件,最后我的本地文件夹中只有最后一个 blob。如何将所有 blob 文件一次下载到一个文件夹中?
from azure.storage.blob import BlockBlobService
block_blob_service = BlockBlobService(account_name=ACCOUNT_NAME, account_key=ACCOUNT_KEY)
generator = block_blob_service.list_blobs(CONTAINER_NAME)
for blob in generator:
block_blob_service.get_blob_to_path(CONTAINER_NAME, blob.name, LOCAL_FILE)
根据我的理解,我认为有两种解决方案可以满足您的需求。
从容器中下载所有blob,并通过
get_blob_to_bytes
或get_blob_to_stream
方法将这些blob内容写入单个文件,请看我的示例代码如下。from azure.storage.blob import BlockBlobService block_blob_service = BlockBlobService(account_name=ACCOUNT_NAME, account_key=ACCOUNT_KEY) generator = block_blob_service.list_blobs(CONTAINER_NAME) fp = open('<your-local-file-name>', 'ab') for blob in generator: # Using `get_blob_to_bytes` b = service.get_blob_to_bytes(container_name, blob.name) fp.write(b.content) # Or using `get_blob_to_stream` # service.get_blob_to_stream(container_name, blob.name, fp) fp.flush() fp.close()
从一个容器中下载所有blob,并通过方法
get_blob_to_bytes
将这些blob写入一个zip文件,请看下面我的示例代码。from azure.storage.blob import BlockBlobService import zipfile block_blob_service = BlockBlobService(account_name=ACCOUNT_NAME, account_key=ACCOUNT_KEY) generator = block_blob_service.list_blobs(CONTAINER_NAME) zf = zipfile.ZipFile(CONTAINER_NAME+'.zip', mode='w', compression=zipfile.ZIP_DEFLATED, ) for blob in generator: b = service.get_blob_to_bytes(container_name, blob.name) zf.writestr(blob.name, b.content) zf.close()
希望对您有所帮助。如有任何疑问,请随时告诉我。
在 azure-storage-blob 版本 12.9.0
中,我使用了以下脚本:
from azure.storage.blob import BlobServiceClient
import zipfile
conn_str = ''
block_blob_service = BlobServiceClient.from_connection_string(conn_str)
generator = block_blob_service.get_container_client(container_name)
my_blobs = generator.list_blobs()
zf = zipfile.ZipFile("data"+'.zip', mode='w', compression=zipfile.ZIP_DEFLATED)
for blob in my_blobs:
bytes = generator.get_blob_client(blob.name).download_blob().readall()
zf.writestr(blob.name, bytes)
zf.close()