Použití Pythonu ke správě adresářů a souborů v Azure Data Lake Storage Gen2

V tomto článku se dozvíte, jak pomocí Pythonu vytvářet a spravovat adresáře a soubory v účtech úložiště, které mají hierarchický obor názvů.

Informace o tom, jak získat, nastavit a aktualizovat seznamy řízení přístupu (ACL) adresářů a souborů, najdete v tématu Použití Pythonu ke správě seznamů ACL v Azure Data Lake Storage Gen2.

Referenční informace k rozhraní API pro balíčky | (PyPi) | s referenčními informacemi | k mapování | Gen1 na Gen2

Požadavky

Nastavení projektu

Tato část vás provede přípravou projektu pro práci s klientskou knihovnou Azure Data Lake Storage pro Python.

Z adresáře projektu nainstalujte balíčky pro klientské knihovny Azure Data Lake Storage a Azure Identity pomocí pip install příkazu. Balíček azure-identity je potřeba pro připojení bez hesla ke službám Azure.

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

Pak otevřete soubor kódu a přidejte potřebné příkazy importu. V tomto příkladu přidáme do souboru .py následující položky:

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

Poznámka:

Přístup k více protokolům ve službě Data Lake Storage umožňuje aplikacím používat rozhraní API objektů blob i rozhraní API Data Lake Storage Gen2 k práci s daty v účtech úložiště s povoleným hierarchickým oborem názvů (HNS). Při práci s funkcemi jedinečnými pro Data Lake Storage Gen2, jako jsou operace adresářů a seznamy ACL, použijte rozhraní API Data Lake Storage Gen2, jak je znázorněno v tomto článku.

Při volbě rozhraní API, která se mají použít v daném scénáři, zvažte úlohy a potřeby vaší aplikace spolu se známými problémy a dopadem HNS na úlohy a aplikace.

Autorizace přístupu a připojení k datovým prostředkům

Pokud chcete pracovat s příklady kódu v tomto článku, musíte vytvořit autorizovanou instanci DataLakeServiceClient , která představuje účet úložiště. Objekt můžete autorizovat DataLakeServiceClient pomocí MICROSOFT Entra ID, přístupového klíče účtu nebo sdíleného přístupového podpisu (SAS).

K ověření aplikace pomocí Microsoft Entra ID můžete použít klientskou knihovnu identit Azure pro Python .

Vytvořte instanci Třídy DataLakeServiceClient a předejte objekt DefaultAzureCredential .

def get_service_client_token_credential(self, account_name) -> DataLakeServiceClient:
    account_url = f"https://{account_name}.dfs.core.windows.net"
    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.

Vytvoření kontejneru

Kontejner funguje jako systém souborů. Kontejner můžete vytvořit pomocí následující metody:

Následující příklad kódu vytvoří kontejner a vrátí FileSystemClient objekt pro pozdější použití:

def create_file_system(self, service_client: DataLakeServiceClient, file_system_name: str) -> FileSystemClient:
    file_system_client = service_client.create_file_system(file_system=file_system_name)

    return file_system_client

Vytvoření adresáře

Odkaz na adresář v kontejneru můžete vytvořit pomocí následující metody:

Následující příklad kódu přidá adresář do kontejneru a vrátí DataLakeDirectoryClient objekt pro pozdější použití:

def create_directory(self, file_system_client: FileSystemClient, directory_name: str) -> DataLakeDirectoryClient:
    directory_client = file_system_client.create_directory(directory_name)

    return directory_client

Přejmenování nebo přesunutí adresáře

Adresář můžete přejmenovat nebo přesunout pomocí následující metody:

Předejte cestu s novým názvem adresáře v argumentu new_name . Hodnota musí mít následující formát: {filesystem}/{directory}/{podadresář}.

Následující příklad kódu ukazuje, jak přejmenovat podadresář:

def rename_directory(self, directory_client: DataLakeDirectoryClient, new_dir_name: str):
    directory_client.rename_directory(
        new_name=f"{directory_client.file_system_name}/{new_dir_name}")

Nahrání souboru do adresáře

Obsah můžete nahrát do nového nebo existujícího souboru pomocí následující metody:

Následující příklad kódu ukazuje, jak nahrát soubor do adresáře pomocí metody 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(data, overwrite=True)

Tuto metodu můžete použít k vytvoření a nahrání obsahu do nového souboru nebo můžete nastavit overwrite argument na True přepsání existujícího souboru.

Připojení dat k souboru

Data, která se mají připojit k souboru, můžete nahrát pomocí následující metody:

  • DataLakeFileClient.append_data metoda.

Následující příklad kódu ukazuje, jak připojit data na konec souboru pomocí následujícího postupu:

  • Vytvořte DataLakeFileClient objekt představující prostředek souboru, se kterým pracujete.
  • Nahrajte data do souboru pomocí metody append_data .
  • Dokončete nahrávání voláním metody flush_data pro zápis dříve nahraných dat do souboru.
def append_data_to_file(self, directory_client: DataLakeDirectoryClient, file_name: str):
    file_client = directory_client.get_file_client(file_name)
    file_size = file_client.get_file_properties().size
    
    data = b"Data to append to end of file"
    file_client.append_data(data, offset=file_size, length=len(data))

    file_client.flush_data(file_size + len(data))

S touto metodou lze data připojit pouze k souboru a operace je omezena na 4 000 MiB na požadavek.

Stažení z adresáře

Následující příklad kódu ukazuje, jak pomocí následujícího postupu stáhnout soubor z adresáře do místního souboru:

  • Vytvořte DataLakeFileClient objekt představující soubor, který chcete stáhnout.
  • Otevřete místní soubor pro zápis.
  • Zavolejte metodu DataLakeFileClient.download_file pro čtení ze souboru a pak zapište data do místního souboru.
def download_file_from_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="wb") as local_file:
        download = file_client.download_file()
        local_file.write(download.readall())
        local_file.close()

Výpis obsahu adresáře

Obsah adresáře můžete zobrazit pomocí následující metody a vytvořit výčet výsledku:

Vytvoření výčtu cest ve výsledku může službě při načítání hodnot vyhovět více požadavků.

Následující příklad kódu vytiskne cestu ke každému podadresáři a souboru umístěnému v adresáři:

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

Odstranění adresáře

Adresář můžete odstranit pomocí následující metody:

Následující příklad kódu ukazuje, jak odstranit adresář:

def delete_directory(self, directory_client: DataLakeDirectoryClient):
    directory_client.delete_directory()

Viz také