Microsoft OneLake'te dosya ve klasörleri yönetmek için Python kullanma

Bu makalede, OneLake'te dosyaları ve dizinleri yönetmek için Azure Depolama Python SDK'sını nasıl kullanabileceğiniz gösterilmektedir. Bu kılavuz, ADLS 2. Nesil'deki dizinleri ve dosyaları yönetmek için Python kullanma ile aynı içeriği kapsar ve OneLake'e bağlanırken farkları vurgular.

Önkoşullar

Projenize başlamadan önce aşağıdaki önkoşullara sahip olduğunuzdan emin olun:

  • Doku kiracınızda Katkıda Bulunan izinlerine sahip bir çalışma alanı.
  • Çalışma alanında bir göl evi. İsteğe bağlı olarak, Python kullanarak okumak için verilerin önceden yüklenmesini sağlayın.

Projenizi ayarlama

Proje dizininizden Azure Data Lake Depolama ve Azure Identity istemci kitaplıkları için paketleri yükleyin. OneLake, Azure Data Lake Depolama (ADLS) 2. Nesil ile aynı SDK'ları destekler ve azure-identity paketi tarafından sağlanan Microsoft Entra kimlik doğrulamasını destekler.

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

Ardından, kod dosyanıza gerekli içeri aktarma deyimlerini ekleyin:

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

OneLake'e erişimi yetkilendirme

Aşağıdaki örnek, diğer işlemler için dosya sistemi istemcileri oluşturmak için kullanabileceğiniz OneLake'e bağlı bir hizmet istemcisi oluşturur. OneLake'de kimlik doğrulaması yapmak için, bu örnekte kimlik bilgilerini otomatik olarak algılamak ve doğru kimlik doğrulama belirtecini almak için DefaultAzureCredential kullanılır. Azure SDK için kimlik bilgileri sağlamanın yaygın yöntemleri arasında Azure Komut Satırı Arabirimi'ndeki 'az login' komutunu veya Azure PowerShell'deki 'Bağlan-AzAccount' cmdlet'ini kullanmak yer alır.

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

Verilere erişimi yetkilendirmek için DefaultAzureCredential kullanma hakkında daha fazla bilgi edinmek için bkz . Genel Bakış: Azure SDK'yı kullanarak Azure'da Python uygulamalarının kimliğini doğrulama.

Dizinlerle çalışma

OneLake'te bir dizinle çalışmak için bir dosya sistemi istemcisi ve dizin istemcisi oluşturun. Yolları yeniden adlandırma, taşıma veya listeleme gibi çeşitli işlemleri gerçekleştirmek için bu dizin istemcisini kullanabilirsiniz (aşağıdaki örnekte görüldüğü gibi). Ayrıca, FileSystemClient.create_directory yöntemini kullanarak dizin oluştururken bir dizin istemcisi de oluşturabilirsiniz.

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

Dosyayı karşıya yükleme

DataLakeFileClient.upload_data yöntemini kullanarak içeriği yeni veya mevcut bir dosyaya yükleyebilirsiniz.

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)

Örnek

Aşağıdaki kod örneği, OneLake'teki herhangi bir klasörün dizin içeriğini listeler.

#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()

Bu örneği çalıştırmak için, önceki kodu bir dosyaya listOneLakeDirectory.py kaydedin ve aynı dizinde aşağıdaki komutu çalıştırın. Çalışma alanını ve yolu örnekteki kendi değerlerinizle değiştirmeyi unutmayın.

python listOneLakeDirectory.py