Compartir a través de


Uso de Python para administrar archivos y carpetas en Microsoft OneLake

En este artículo se muestra cómo puede usar el SDK de Python de Azure Storage para administrar archivos y directorios en OneLake. En este tutorial se describe el mismo contenido que Usar Python para administrar directorios y archivos en ADLS Gen2 y se resaltan las diferencias al conectarse a OneLake.

Requisitos previos

Antes de comenzar el proyecto, asegúrese de que dispone de lo siguiente:

  • Un área de trabajo del inquilino de Fabric con permisos de colaborador.
  • Una casa de lago en el área de trabajo. Opcionalmente, tener datos cargados previamente para leerlos mediante Python.

Configuración del proyecto

En el directorio del proyecto, instale los paquetes para las bibliotecas cliente de Azure Data Lake Storage y Azure Identity. OneLake admite los mismos SDK que Azure Data Lake Storage (ADLS) Gen2 y la autenticación de Microsoft Entra, que proporciona el paquete azure-identity.

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

A continuación, agregue las instrucciones de importación necesarias al archivo de código:

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

Autorizar el acceso a OneLake

En el ejemplo siguiente se crea un cliente de servicio conectado a OneLake que puede usar para crear clientes del sistema de archivos para otras operaciones. Para autenticarse en OneLake, en este ejemplo se usa DefaultAzureCredential, que detecta automáticamente las credenciales y obtiene el token de autenticación correcto. Los métodos comunes para proporcionar credenciales para el SDK de Azure incluyen el comando "az login" en la interfaz de la línea de comandos de Azure o el cmdlet "Connect-AzAccount" de 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 más información sobre el uso de DefaultAzureCredential para autorizar el acceso a los datos, consulte Información general: Autenticación de aplicaciones de Python en Azure mediante Azure SDK.

Trabajar con directorios

Para trabajar con un directorio en OneLake, cree un cliente de sistema de archivos y un cliente de directorio. Puede usar este cliente de directorio para realizar varias operaciones, como cambiar el nombre, mover o enumerar rutas de acceso (como se muestra en el ejemplo siguiente). También puede crear un cliente de directorio al crear un directorio mediante el 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')

Cargar un archivo

Puede cargar contenido en un archivo nuevo o existente, mediante el 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)

Ejemplo

En el ejemplo de código siguiente se muestra el contenido del directorio de cualquier carpeta en 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 ejecutar este ejemplo, guarde el código anterior en un archivo listOneLakeDirectory.py y ejecute el siguiente comando en el mismo directorio. Recuerde reemplazar el área de trabajo y la ruta de acceso por sus propios valores en el ejemplo.

python listOneLakeDirectory.py