Condividi tramite


Usare Python per gestire file e cartelle in Microsoft OneLake

Questo articolo spiega come usare l’Archiviazione di Azure Python SDK per gestire file e directory in OneLake. Questa procedura dettagliata illustra lo stesso contenuto di Usare Python per gestire directory e file in ADLS Gen2 ed evidenzia le differenze durante la connessione a OneLake.

Prerequisiti

Prima di iniziare il progetto, assicurarsi che i seguenti prerequisiti siano disponibili:

  • Un'area di lavoro nel tenant di Fabric con autorizzazioni di contributore.
  • Un lakehouse nell'area di lavoro. Se si desidera, impostare i dati precaricati per la lettura con Python.

Impostare il progetto

Dalla directory del progetto, installare i pacchetti per le librerie client di Azure Data Lake Storage e Azure Identity. OneLake supporta gli stessi SDK di Azure Data Lake Storage (ADLS) Gen2 e supporta l'autenticazione di Microsoft Entra, fornita dal pacchetto azure identity.

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

Aggiungere le istruzioni di importazione necessarie per il file di codice:

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

Autorizzare l'accesso a OneLake

Nell'esempio seguente viene creato un client di servizio connesso a OneLake, che può essere usato per creare client del file system per altre operazioni. Per eseguire l'autenticazione su OneLake, questo esempio usa DefaultAzureCredential per rilevare automaticamente le credenziali e ottenere il token di autenticazione corretto. I metodi comuni per fornire le credenziali per Azure SDK includono l'uso del comando "az login" nell'interfaccia della riga di comando di Azure o il cmdlet "Connect-AzAccount" di 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

Per altre informazioni sull'uso di DefaultAzureCredential per autorizzare l'accesso ai dati, vedere Informazioni generali: Autenticare le app Python in Azure con Azure SDK.

Lavorare con le directory

Per usare una directory in OneLake, creare un client di file system e un client di directory. È possibile usare questo client di directory per eseguire varie operazioni, tra cui la ridenominazione, lo spostamento o l'elenco dei percorsi (come illustrato nell'esempio seguente). È anche possibile creare un client di directory durante la creazione di una directory usando il metodo 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')

Caricare un file

È possibile caricare contenuto in un file nuovo o esistente usando il metodo 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)

Esempio

L'esempio di codice seguente elenca il contenuto della directory di qualsiasi cartella in 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()

Per eseguire questo esempio, salvare il codice precedente in un file listOneLakeDirectory.py ed eseguire il comando seguente nella stessa directory. Ricordarsi di sostituire l’area di lavoro e il percorso nell’esempio con i valori personalizzati.

python listOneLakeDirectory.py