Partager via


Utiliser Python pour gérer des fichiers et des dossiers dans Microsoft OneLake

Cet article explique comment utiliser le kit de développement logiciel (SDK) Python du stockage Azure pour gérer les fichiers et les répertoires dans OneLake. Cette procédure pas à pas couvre le même contenu que Utiliser Python pour gérer les répertoires et les fichiers dans ADLS Gen2 et souligne les différences lors de la connexion à OneLake.

Prérequis

Avant de démarrer votre projet, veillez à avoir les prérequis suivants :

  • Un espace de travail dans votre locataire Fabric avec des autorisations Contributeur.
  • Un lakehouse dans l’espace de travail. Si vous le souhaitez, préchargez les données en lecture à l’aide de Python.

Configuration de votre projet

À partir du répertoire du projet, installez les packages pour les bibliothèques client Azure Data Lake Storage et Azure Identity. OneLake prend en charge les mêmes SDK qu’Azure Data Lake Storage (ADLS) Gen2 ainsi que l’authentification Microsoft Entra, fournie par le package azure-identity.

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

Ensuite, ajoutez les instructions d’import nécessaires à votre fichier de code :

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

Autoriser l’accès à OneLake

L'exemple suivant crée un client de service connecté à OneLake que vous pouvez utiliser pour créer des clients de système de fichiers pour d'autres opérations. Pour vous authentifier sur OneLake, cet exemple utilise DefaultAzureCredential afin de détecter automatiquement les informations d’identification et obtenir le jeton d’authentification approprié. Les méthodes courantes de fourniture d’informations d’identification pour Azure SDK sont notamment l’utilisation de la commande « az login » dans l’interface de ligne de commande Azure ou l’applet de commande « Connect-AzAccount » d’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

Pour en savoir plus sur l’utilisation de DefaultAzureCredential pour autoriser l’accès aux données, consultez Vue d’ensemble : authentifier des applications Python sur Azure à l’aide du kit de développement logiciel (SDK) Azure.

Travailler avec des répertoires

Pour travailler avec un répertoire dans OneLake, créez un client de système de fichiers et un client de répertoire. Vous pouvez utiliser ce client d'annuaire pour effectuer diverses opérations, notamment renommer, déplacer ou répertorier les chemins (comme le montre l'exemple suivant). Vous pouvez également créer un client d'annuaire lors de la création d'un répertoire, à l'aide de la méthode 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')

Charger un fichier

Vous pouvez charger un contenu dans un fichier nouveau ou existant à l’aide de la méthode 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)

Exemple

L’exemple de code suivant liste le contenu du répertoire d’un dossier dans 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()

Pour exécuter cet exemple, enregistrez le code précédent dans un fichier listOneLakeDirectory.py et exécutez la commande suivante dans le même répertoire. N’oubliez pas de remplacer l’espace de travail et le chemin par vos propres données dans l’exemple.

python listOneLakeDirectory.py