Dela via


Använda Python för att hantera filer och mappar i Microsoft OneLake

Den här artikeln visar hur du kan använda Azure Storage Python SDK för att hantera filer och kataloger i OneLake. Den här genomgången beskriver samma innehåll som Använd Python för att hantera kataloger och filer i ADLS Gen2 och belyser skillnaderna när du ansluter till OneLake.

Förutsättningar

Kontrollera att du har följande förutsättningar innan du startar projektet:

  • En arbetsyta i infrastrukturresursklientorganisationen med deltagarbehörighet.
  • Ett sjöhus på arbetsytan. Du kan också ha data förinlästa för att läsa med Python.

Konfigurera projektet

Från projektkatalogen installerar du paket för Azure Data Lake Storage- och Azure Identity-klientbiblioteken. OneLake stöder samma SDK:er som Azure Data Lake Storage (ADLS) Gen2 och stöder Microsoft Entra-autentisering, som tillhandahålls av azure-identity-paketet.

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

Lägg sedan till nödvändiga importinstruktioner i kodfilen:

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

Auktorisera åtkomst till OneLake

I följande exempel skapas en tjänstklient som är ansluten till OneLake som du kan använda för att skapa filsystemklienter för andra åtgärder. För att autentisera till OneLake använder det här exemplet StandardAzureCredential för att automatiskt identifiera autentiseringsuppgifter och hämta rätt autentiseringstoken. Vanliga metoder för att ange autentiseringsuppgifter för Azure SDK är att använda kommandot "az login" i Azure-kommandoradsgränssnittet eller cmdleten "Connect-AzAccount" från 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

Mer information om hur du använder DefaultAzureCredential för att auktorisera åtkomst till data finns i Översikt: Autentisera Python-appar till Azure med Hjälp av Azure SDK.

Arbeta med kataloger

Om du vill arbeta med en katalog i OneLake skapar du en filsystemklient och katalogklient. Du kan använda den här katalogklienten för att utföra olika åtgärder, till exempel byta namn på, flytta eller lista sökvägar (som du ser i följande exempel). Du kan också skapa en katalogklient när du skapar en katalog med hjälp av metoden 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')

Ladda upp en fil

Du kan ladda upp innehåll till en ny eller befintlig fil med hjälp av metoden 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)

Exempel

Följande kodexempel visar kataloginnehållet i en mapp 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()

Om du vill köra det här exemplet sparar du föregående kod i en fil listOneLakeDirectory.py och kör följande kommando i samma katalog. Kom ihåg att ersätta arbetsytan och sökvägen med dina egna värden i exemplet.

python listOneLakeDirectory.py