Bruke Python til å behandle filer og mapper i Microsoft OneLake

Denne artikkelen viser hvordan du kan bruke Azure Storage Python SDK til å administrere filer og kataloger i OneLake. Denne gjennomgangen dekker det samme innholdet som Bruk Python til å administrere kataloger og filer i ADLS Gen2 og fremhever forskjellene når du kobler til OneLake.

Forutsetning

Før du starter prosjektet, må du kontrollere at du har følgende forutsetninger:

  • Et arbeidsområde i Fabric-leieren med bidragsytertillatelser.
  • Et lakehouse i arbeidsområdet. Du kan eventuelt ha data forhåndslastet for å lese ved hjelp av Python.

Konfigurere prosjektet

Installer pakker for Azure Data Lake Storage og Azure Identity-klientbiblioteker fra prosjektkatalogen. OneLake støtter de samme SDK-ene som Azure Data Lake Storage (ADLS) Gen2 og støtter Microsoft Entra-godkjenning, som leveres av azure-identitetspakken.

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

Deretter legger du til de nødvendige importsetningene i kodefilen:

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

Godkjenne tilgang til OneLake

Følgende eksempel oppretter en tjenesteklient som er koblet til OneLake, som du kan bruke til å opprette filsystemklienter for andre operasjoner. Hvis du vil godkjenne til OneLake, bruker dette eksemplet DefaultAzureCredential til automatisk å oppdage legitimasjon og få riktig godkjenningstoken. Vanlige metoder for å oppgi legitimasjon for Azure SDK inkluderer bruk av kommandoen «az login» i Azure Command Line Interface eller cmdleten «Koble til-AzAccount» fra 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

Hvis du vil lære mer om hvordan du bruker DefaultAzureCredential til å godkjenne tilgang til data, kan du se Oversikt: Godkjenne Python-apper til Azure ved hjelp av Azure SDK.

Arbeide med kataloger

Hvis du vil arbeide med en katalog i OneLake, oppretter du en filsystemklient og katalogklient. Du kan bruke denne katalogklienten til å utføre ulike operasjoner, inkludert å gi nytt navn til, flytte eller vise baner (som vist i eksemplet nedenfor). Du kan også opprette en katalogklient når du oppretter en katalog ved hjelp av FileSystemClient.create_directory metoden.

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')

Laste opp en fil

Du kan laste opp innhold til en ny eller eksisterende fil ved hjelp av DataLakeFileClient.upload_data metoden.

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)

Eksempel

Følgende kodeeksempel viser kataloginnholdet i en mappe i 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()

Hvis du vil kjøre dette eksemplet, lagrer du den foregående koden i en fil listOneLakeDirectory.py og kjører følgende kommando i samme katalog. Husk å erstatte arbeidsområdet og banen med dine egne verdier i eksemplet.

python listOneLakeDirectory.py