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