Partilhar via


Use Python para gerenciar arquivos e pastas no Microsoft OneLake

Este artigo mostra como você pode usar o SDK Python do Armazenamento do Azure para gerenciar arquivos e diretórios no OneLake. Este passo a passo aborda o mesmo conteúdo de Usar Python para gerenciar diretórios e arquivos no ADLS Gen2 e destaca as diferenças ao se conectar ao OneLake.

Pré-requisitos

Antes de iniciar o projeto, certifique-se de que tem os seguintes pré-requisitos:

  • Um espaço de trabalho em seu locatário do Fabric com permissões de Colaborador.
  • Uma casa de lago no espaço de trabalho. Opcionalmente, tenha os dados pré-carregados para leitura usando Python.

Configure o seu projeto

No diretório do projeto, instale pacotes para o Armazenamento Azure Data Lake e as bibliotecas de cliente do Azure Identity. O OneLake dá suporte aos mesmos SDKs do Azure Data Lake Storage (ADLS) Gen2 e dá suporte à autenticação Microsoft Entra, que é fornecida pelo pacote azure-identity.

pip install azure-storage-file-datalake azure-identity

Em seguida, adicione as instruções de importação necessárias ao seu arquivo de código:

import os
from azure.storage.filedatalake import (
    DataLakeServiceClient,
    DataLakeDirectoryClient,
    FileSystemClient
)
from azure.identity import DefaultAzureCredential

Autorizar o acesso ao OneLake

O exemplo a seguir cria um cliente de serviço conectado ao OneLake que você pode usar para criar clientes de sistema de arquivos para outras operações. Para autenticar no OneLake, este exemplo usa o DefaultAzureCredential para detetar automaticamente as credenciais e obter o token de autenticação correto. Os métodos comuns de fornecimento de credenciais para o SDK do Azure incluem o uso do comando 'az login' na Interface de Linha de Comando do Azure ou o cmdlet 'Connect-AzAccount' do Azure PowerShell.

def get_service_client_token_credential(self, account_name) -> DataLakeServiceClient:
    account_url = f"https://{account_name}.dfs.fabric.microsoft.com"
    token_credential = DefaultAzureCredential()

    service_client = DataLakeServiceClient(account_url, credential=token_credential)

    return service_client

Para saber mais sobre como usar DefaultAzureCredential para autorizar o acesso a dados, consulte Visão geral: autenticar aplicativos Python no Azure usando o SDK do Azure.

Trabalhando com diretórios

Para trabalhar com um diretório no OneLake, crie um cliente de sistema de arquivos e um cliente de diretório. Você pode usar esse cliente de diretório para executar várias operações, incluindo renomear, mover ou listar caminhos (como visto no exemplo a seguir). Você também pode criar um cliente de diretório ao criar um diretório, usando o método FileSystemClient.create_directory .

def create_file_system_client(self, service_client, file_system_name: str) : DataLakeServiceClient) -> FileSystemClient:
    file_system_client = service_client.get_file_system_client(file_system = file_system_name)
    return file_system_client

def create_directory_client(self, file_system_client : FileSystemClient, path: str) -> DataLakeDirectoryClient: directory_client 
    directory_client = file_system_client.GetDirectoryClient(path)
    return directory_client


def list_directory_contents(self, file_system_client: FileSystemClient, directory_name: str):
    paths = file_system_client.get_paths(path=directory_name)

    for path in paths:
        print(path.name + '\n')

Carregar um ficheiro

Você pode carregar conteúdo para um arquivo novo ou existente usando o método DataLakeFileClient.upload_data .

def upload_file_to_directory(self, directory_client: DataLakeDirectoryClient, local_path: str, file_name: str):
    file_client = directory_client.get_file_client(file_name)

    with open(file=os.path.join(local_path, file_name), mode="rb") as data:
        file_client.upload_data(dataW, overwrite=True)

Exemplo

O exemplo de código a seguir lista o conteúdo do diretório de qualquer pasta no OneLake.

#Install the correct packages first in the same folder as this file. 
#pip install azure-storage-file-datalake azure-identity

from azure.storage.filedatalake import (
    DataLakeServiceClient,
    DataLakeDirectoryClient,
    FileSystemClient
)
from azure.identity import DefaultAzureCredential

# Set your account, workspace, and item path here
ACCOUNT_NAME = "onelake"
WORKSPACE_NAME = "<myWorkspace>"
DATA_PATH = "<myLakehouse>.Lakehouse/Files/<path>"

def main():
    #Create a service client using the default Azure credential

    account_url = f"https://{ACCOUNT_NAME}.dfs.fabric.microsoft.com"
    token_credential = DefaultAzureCredential()
    service_client = DataLakeServiceClient(account_url, credential=token_credential)

    #Create a file system client for the workspace
    file_system_client = service_client.get_file_system_client(WORKSPACE_NAME)
    
    #List a directory within the filesystem
    paths = file_system_client.get_paths(path=DATA_PATH)

    for path in paths:
        print(path.name + '\n')

if __name__ == "__main__":
    main()

Para executar este exemplo, salve o código anterior em um arquivo listOneLakeDirectory.py e execute o seguinte comando no mesmo diretório. Lembre-se de substituir o espaço de trabalho e o caminho por seus próprios valores no exemplo.

python listOneLakeDirectory.py