Как рекурсивно загрузить папку в хранилище BLOB-объектов Azure с помощью Python - PullRequest
0 голосов
/ 15 октября 2019

Я могу загрузить один файл в хранилище BLOB-объектов Azure с помощью Python. Но для папки с несколькими папками, содержащими данные, можно ли попытаться загрузить всю папку с одним и тем же каталогом в Azure?

Скажи, что у меня естьFOLDERA------ SUBFOLDERa---------- filea.txt---------- fileb.txt------ SUBFOLDERb------ SUBFOLDERcЯ хочу поместить эту FOLDERA как указанную выше структуру в Azure. Есть намеки?

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

@ Krumelur почти прав, но здесь я хочу привести пример рабочего кода, а также объяснить, что некоторые папки не могут быть загружены в хранилище BLOB-объектов Azure.

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.Вы должны помнить, что ни одна пустая папка не может быть создана / загружена в хранилище BLOB-объектов Azure, поскольку в хранилище BLOB-объектов Azure нет настоящей «папки». Папка или каталог является лишь частью имени BLOB-объекта. Таким образом, без реального большого двоичного файла, такого как test.txt внутри папки, невозможно создать / загрузить пустую папку. Таким образом, в структуре папок пустые папки SUBFOLDERb и SUBFOLDERc не могут быть загружены в хранилище BLOB-объектов Azure.

Результат теста, как показано ниже, все непустые папки загружаются в хранилище BLOB-объектов в Azure:

enter image description here

0 голосов
/ 15 октября 2019

Ничего встроенного нет, но вы легко можете написать эту функциональность в своем коде (см. os.walk).

Другой вариант - использовать модуль подпроцесса для вызова инструмента командной строки azcopy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...