如何使用Python将文件夹递归上传到Azure Blob存储

时间:2019-10-15 12:11:28

标签: python azure blobstorage

我可以使用Python将单个文件上传到Azure blob存储。但是对于包含多个包含数据的文件夹的文件夹,是否可以尝试将具有相同目录的整个文件夹上载到Azure?

说我有

文件夹
    ------ SUBFOLDERa
    ---------- filea.txt
    ---------- fileb.txt
    ------ SUBFOLDERb
    ------ SUBFOLDERc

我想将上述FOLDERA结构放入Azure。 有提示吗?

2 个答案:

答案 0 :(得分:0)

没有内置任何内容,但是您可以轻松地在代码中编写该功能(请参见os.walk)。

另一种选择是使用子流程模块调用azcopy命令行工具。

答案 1 :(得分:0)

@Krumelur几乎是正确的,但是在这里我想给出一个有效的代码示例,并说明一些文件夹无法上传到Azure Blob存储。

1。代码示例:

from azure.storage.blob import BlockBlobService,PublicAccess
import os

def run_sample():
    account_name = "your_account_name"
    account_key ="your_account_key"
    block_blob_service = BlockBlobService(account_name, account_key)
    container_name ='test1'

    path_remove = "F:\\"
    local_path = "F:\\folderA"

    for r,d,f in os.walk(local_path):        
        if f:
            for file in f:
                file_path_on_azure = os.path.join(r,file).replace(path_remove,"")
                file_path_on_local = os.path.join(r,file)
                block_blob_service.create_blob_from_path(container_name,file_path_on_azure,file_path_on_local)            

# Main method.
if __name__ == '__main__':
    run_sample()

2。您应该记住,不能创建任何空文件夹/将其上载到Azure Blob存储中,因为在Azure Blob存储中没有真正的“文件夹”。文件夹或目录只是Blob名称的一部分。因此,如果在文件夹中没有真正的blob文件(如test.txt),就无法创建/上传空文件夹。因此,在您的文件夹结构中,空文件夹SUBFOLDERb和SUBFOLDERc无法上传到Azure Blob存储。

测试结果如下,所有非空文件夹均以天蓝色上传到blob存储中:

enter image description here

相关问题