Share via


Python gebruiken om bestanden en mappen te beheren in Microsoft OneLake

In dit artikel wordt beschreven hoe u de Azure Storage Python SDK kunt gebruiken voor het beheren van bestanden en mappen in OneLake. In dit scenario wordt dezelfde inhoud behandeld als Python gebruiken voor het beheren van mappen en bestanden in ADLS Gen2 en worden de verschillen gemarkeerd wanneer u verbinding maakt met OneLake.

Vereisten

Zorg ervoor dat u aan de volgende vereisten voldoet voordat u begint met uw project:

  • Een werkruimte in uw Fabric-tenant met inzendermachtigingen.
  • Een lakehouse in de werkruimte. U kunt eventueel gegevens vooraf laten laden om te lezen met behulp van Python.

Uw project instellen

Installeer vanuit uw projectmap pakketten voor de Azure Data Lake Storage- en Azure Identity-clientbibliotheken. OneLake ondersteunt dezelfde SDK's als Azure Data Lake Storage (ADLS) Gen2 en biedt ondersteuning voor Microsoft Entra-verificatie, die wordt geleverd door het azure-identity-pakket.

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

Voeg vervolgens de benodigde importinstructies toe aan uw codebestand:

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

Toegang tot OneLake autoriseren

In het volgende voorbeeld wordt een serviceclient gemaakt die is verbonden met OneLake, die u kunt gebruiken om bestandssysteemclients te maken voor andere bewerkingen. Voor verificatie bij OneLake gebruikt dit voorbeeld de DefaultAzureCredential om automatisch referenties te detecteren en het juiste verificatietoken te verkrijgen. Veelgebruikte methoden voor het opgeven van referenties voor de Azure SDK zijn onder andere het gebruik van de opdracht az login in de Azure-opdrachtregelinterface of de cmdlet 'Verbinding maken-AzAccount' van 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

Zie Overzicht: Python-apps verifiëren bij Azure met behulp van de Azure SDK voor meer informatie over het gebruik van DefaultAzureCredential om toegang tot gegevens te autoriseren.

Werken met mappen

Als u wilt werken met een map in OneLake, maakt u een bestandssysteemclient en mapclient. U kunt deze directoryclient gebruiken om verschillende bewerkingen uit te voeren, zoals het wijzigen van de naam, het verplaatsen of vermelden van paden (zoals in het volgende voorbeeld wordt weergegeven). U kunt ook een directoryclient maken bij het maken van een map met behulp van de methode 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')

Een bestand uploaden

U kunt inhoud uploaden naar een nieuw of bestaand bestand met behulp van de methode 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)

Voorbeeld

In het volgende codevoorbeeld ziet u de mapinhoud van een map 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()

Als u dit voorbeeld wilt uitvoeren, slaat u de voorgaande code op in een bestand listOneLakeDirectory.py en voert u de volgende opdracht uit in dezelfde map. Vergeet niet om de werkruimte en het pad te vervangen door uw eigen waarden in het voorbeeld.

python listOneLakeDirectory.py