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

如何使用Python将文件夹递归上载到Azure blob存储,python,azure,blobstorage,Python,Azure,Blobstorage,我可以使用Python将单个文件上载到Azure blob存储。但是对于包含多个包含数据的文件夹的文件夹,有没有办法尝试将具有相同目录的整个文件夹上载到Azure? 说我有 福尔德拉 ------子文件夹A ----------filea.txt ----------fileb.txt ------子文件夹B ------子文件夹C 我想把这个文件夹放在Azure的上面。 有什么提示吗?没有内置功能,但您可以轻松地在代码中编写该功能(请参见os.walk) 另一个选项是使用子流程模块调用az

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

说我有 福尔德拉
------子文件夹A
----------filea.txt
----------fileb.txt
------子文件夹B
------子文件夹C

我想把这个文件夹放在Azure的上面。
有什么提示吗?

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


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

@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名称的一部分。因此,如果文件夹中没有像test.txt这样的真实blob文件,就无法创建/上载空文件夹。因此,在您的文件夹结构中,空文件夹子文件夹B和子文件夹C无法上载到azure blob存储

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


非常感谢!这就是我遇到的问题:replace(path_remove,“”)很高兴它有帮助:)是否有类似的方法使用BlobServiceClient将文件夹上载到Blob@IvanYang@liamsuma,我认为这是可能的。你能提出一个问题,然后让我知道网址吗?谢谢你的时间和回复。我将发布一个问题,其url链接在这里