Udostępnij za pośrednictwem


Zarządzanie plikami i folderami w usłudze Microsoft OneLake przy użyciu języka Python

W tym artykule pokazano, jak za pomocą zestawu SDK języka Python usługi Azure Storage zarządzać plikami i katalogami w usłudze OneLake. W tym przewodniku opisano tę samą zawartość co używanie języka Python do zarządzania katalogami i plikami w usłudze ADLS Gen2 oraz wyróżnia różnice podczas nawiązywania połączenia z usługą OneLake.

Wymagania wstępne

Przed rozpoczęciem projektu upewnij się, że masz następujące wymagania wstępne:

  • Obszar roboczy w dzierżawie usługi Fabric z uprawnieniami współautora.
  • Jezioro w obszarze roboczym. Opcjonalnie załaduj dane wstępnie do odczytu przy użyciu języka Python.

konfigurowanie projektu

Z katalogu projektu zainstaluj pakiety dla bibliotek klienta usługi Azure Data Lake Storage i usługi Azure Identity. Usługa OneLake obsługuje te same zestawy SDK co usługa Azure Data Lake Storage (ADLS) Gen2 i obsługuje uwierzytelnianie firmy Microsoft Entra, które jest dostarczane przez pakiet azure-identity.

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

Następnie dodaj niezbędne instrukcje importu do pliku kodu:

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

Autoryzowanie dostępu do usługi OneLake

Poniższy przykład tworzy klienta usługi połączonego z usługą OneLake, którego można użyć do tworzenia klientów systemu plików dla innych operacji. Aby uwierzytelnić się w usłudze OneLake, w tym przykładzie użyto wartości DefaultAzureCredential do automatycznego wykrywania poświadczeń i uzyskiwania poprawnego tokenu uwierzytelniania. Typowe metody podawania poświadczeń dla zestawu Azure SDK obejmują użycie polecenia "az login" w interfejsie wiersza polecenia platformy Azure lub polecenia cmdlet "Connect-AzAccount" z programu 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

Aby dowiedzieć się więcej na temat używania wartości DefaultAzureCredential do autoryzowania dostępu do danych, zobacz Omówienie: Uwierzytelnianie aplikacji języka Python na platformie Azure przy użyciu zestawu Azure SDK.

Praca z katalogami

Aby pracować z katalogiem w usłudze OneLake, utwórz klienta systemu plików i klienta katalogu. Tego klienta katalogu można użyć do wykonywania różnych operacji, w tym zmiany nazw, przenoszenia lub wyświetlania listy ścieżek (jak pokazano w poniższym przykładzie). Klienta katalogu można również utworzyć podczas tworzenia katalogu przy użyciu 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')

Przekazywanie pliku

Zawartość można przekazać do nowego lub istniejącego pliku przy użyciu 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)

Przykład

Poniższy przykładowy kod zawiera listę zawartości katalogu dowolnego folderu w usłudze 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()

Aby uruchomić ten przykład, zapisz poprzedni kod w pliku listOneLakeDirectory.py i uruchom następujące polecenie w tym samym katalogu. Pamiętaj, aby zastąpić obszar roboczy i ścieżkę własnymi wartościami w przykładzie.

python listOneLakeDirectory.py