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

How to recursively upload folder to Azure blob storage with Python

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

说我有

弗尔德拉
------SUBFOLDERa
----------filea.txt
----------fileb.txt
------子文件夹b
------SUBFOLDERc

我想把这个 FOLDERA 作为上面的结构放到 Azure 中。 有什么提示吗?

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

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

@Krumelur 几乎是正确的,但在这里我想给出一个工作代码示例,并解释一些文件夹无法上传到 azure blob 存储。

1.Code 示例:

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.You 应该记住,不能创建/上传任何空文件夹到 azure blob 存储,因为 azure blob 存储中没有真正的 "folder"。文件夹或目录只是 blob 名称的一部分。因此,如果文件夹中没有像 test.txt 这样的真正的 blob 文件,就无法 create/upload 一个空文件夹。因此在您的文件夹结构中,空文件夹 SUBFOLDERb 和 SUBFOLDERc 无法上传到 azure blob 存储。

测试结果如下,所有非空文件夹都上传到azure中的blob存储: