如何在Azure存储容器中创建目录,而不创建额外的文件?

人气:383 发布:2022-10-16 标签: azure python azure-storage azure-blob-storage

问题描述

我已经创建了在Azure存储容器中创建一系列文件夹和子文件夹(用于数据湖)的Python代码。该代码工作正常,并基于Microsoft Azure上的文档。不过,有一件事是我在文件夹中创建了一个虚拟的‘txt’文件,以便创建目录(我可以稍后清理它)。我想知道是否有一种方法可以在不创建文件的情况下创建文件夹和子文件夹。我知道Azure容器存储中的文件夹不是分层的,而是元数据,我所要求的可能是不可能的?

connection_string = config['azure_storage_connectionstring']
gen2_container_name = config['gen2_container_name']
container_client = ContainerClient.from_connection_string(connection_string, gen2_container_name)
blob_service_client = BlobServiceClient.from_connection_string(connection_string)

# blob_service_client.create_container(gen2_container_name)


def create_folder(folder, sub_folder):
    blob_client = container_client.get_blob_client('{}/{}/start_here.txt'.format(folder, sub_folder)) 

    with open ('test.txt', 'rb') as data:
        blob_client.upload_blob(data)



def create_all_folders():
    config = load_config()
    folder_list = config['folder_list']
    sub_folder_list = config['sub_folder_list']
    for folder in folder_list:
        for sub_folder in sub_folder_list:
            try:
                create_folder(folder, sub_folder)
            except Exception as e:
                print ('Looks like something went wrong here trying to create this folder structure {}/{}. Maybe the structure already exists?'.format(folder, sub_folder))

推荐答案

我已经创建了用于创建一系列文件夹和子文件夹的Python代码 (用于数据湖)在Azure存储容器中。该代码工作正常,并且 基于Microsoft Azure上的文档。不过,有一件事是 我在文件夹中创建了一个虚拟的‘txt’文件,以便创建 目录(稍后我可以清理它)。我想知道有没有 一种无需创建文件即可创建文件夹和子文件夹的方法。我 了解Azure容器存储中的文件夹不是 而不是元数据,而我所要求的可能不是 可能吗?

不,对于BLOB存储,这是不可能的。无法创建所谓的文件夹

但您可以像这样使用data-lake SDK创建目录:

from azure.storage.filedatalake import DataLakeServiceClient 
connect_str = "DefaultEndpointsProtocol=https;AccountName=0730bowmanwindow;AccountKey=xxxxxx;EndpointSuffix=core.windows.net"
datalake_service_client = DataLakeServiceClient.from_connection_string(connect_str)
myfilesystem = "test"
myfolder     = "test1111111111"
myfile       = "FileName.txt"

file_system_client = datalake_service_client.get_file_system_client(myfilesystem)            
directory_client = file_system_client.create_directory(myfolder)    

379