Sdílet prostřednictvím


Použití Pythonu ke správě souborů a složek v Microsoft OneLake

Tento článek ukazuje, jak můžete pomocí sady Python SDK služby Azure Storage spravovat soubory a adresáře ve OneLake. Tento názorný postup popisuje stejný obsah jako Použití Pythonu ke správě adresářů a souborů v ADLS Gen2 a zdůrazňuje rozdíly při připojování k OneLake.

Požadavky

Před zahájením projektu se ujistěte, že máte následující požadavky:

  • Pracovní prostor ve vašem tenantovi Fabric s oprávněními přispěvatele
  • Jezero v pracovním prostoru. Volitelně můžete mít předem načtená data pro čtení pomocí Pythonu.

Nastavení projektu

Z adresáře projektu nainstalujte balíčky pro klientské knihovny Azure Data Lake Storage a Azure Identity. OneLake podporuje stejné sady SDK jako Azure Data Lake Storage (ADLS) Gen2 a podporuje ověřování Microsoft Entra, které poskytuje balíček azure-identity.

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

Dále do souboru kódu přidejte potřebné příkazy importu:

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

Autorizace přístupu k OneLake

Následující příklad vytvoří klienta služby připojeného k OneLake, který můžete použít k vytvoření klientů systému souborů pro jiné operace. K ověření ve OneLake tento příklad používá defaultAzureCredential k automatickému zjištění přihlašovacích údajů a získání správného ověřovacího tokenu. Mezi běžné metody zadání přihlašovacích údajů pro sadu Azure SDK patří použití příkazu az login v rozhraní příkazového řádku Azure nebo rutiny Connect-AzAccount z Azure PowerShellu.

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

Další informace o použití DefaultAzureCredential k autorizaci přístupu k datům najdete v tématu Přehled: Ověřování aplikací Pythonu v Azure pomocí sady Azure SDK.

Práce s adresáři

Pokud chcete pracovat s adresářem ve OneLake, vytvořte klienta systému souborů a klienta adresáře. Pomocí tohoto klienta adresáře můžete provádět různé operace, včetně přejmenování, přesunutí nebo výpisu cest (jak je vidět v následujícím příkladu). Klienta adresáře můžete vytvořit také při vytváření adresáře pomocí metody 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')

Odeslání souboru

Obsah můžete nahrát do nového nebo existujícího souboru pomocí metody 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)

Vzorek

Následující ukázka kódu uvádí obsah adresáře libovolné složky ve 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()

Pokud chcete spustit tuto ukázku, uložte předchozí kód do souboru listOneLakeDirectory.py a spusťte následující příkaz ve stejném adresáři. Nezapomeňte nahradit pracovní prostor a cestu vlastními hodnotami v příkladu.

python listOneLakeDirectory.py