Použití Pythonu ke správě adresářů a souborů ve službě Azure Data Lake Storage
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 ve službě Azure Data Lake Storage.
Referenční informace k rozhraní API pro balíčky | (PyPi) | s referenčními informacemi | k mapování | Gen1 na Gen2
Požadavky
Předplatné Azure. Viz Získání bezplatné zkušební verze Azure.
Účet úložiště s povoleným hierarchickým oborem názvů . Postupujte podle těchto pokynů a vytvořte ho.
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:
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()