使用python从azure容器本地下载所有blob文件

时间:2017-03-18 14:45:55

标签: python azure azure-storage azure-storage-blobs

我在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)

1 个答案:

答案 0 :(得分:3)

根据我的理解,我认为有两种解决方案可以满足您的需求。

  1. 从容器中下载所有blob,并通过get_blob_to_bytesget_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()
    
  2. 从容器中下载所有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()
    
  3. 希望它有所帮助。如有任何疑虑,请随时告诉我。