Использование Python для управления файлами и папками в Microsoft OneLake

В этой статье показано, как использовать пакет SDK для Python служба хранилища Azure для управления файлами и каталогами в OneLake. В этом пошаговом руководстве описывается то же содержимое, что и Использование Python для управления каталогами и файлами в ADLS 2-го поколения, и выделяет различия при подключении к OneLake.

Необходимые компоненты

Перед запуском проекта убедитесь, что у вас есть следующие предварительные требования:

  • Рабочая область в клиенте Fabric с разрешениями участника.
  • Лейкхаус в рабочей области. При необходимости предварительно загружены данные для чтения с помощью Python.

Настройка проекта

В каталоге проекта установите пакеты для клиентских библиотек Azure Data Lake Storage и Azure Identity. OneLake поддерживает те же пакеты SDK, что и Azure Data Lake Storage (ADLS) 2-го поколения и поддерживает проверку подлинности Microsoft Entra, которая предоставляется пакетом azure-identity.

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

Затем добавьте необходимые инструкции импорта в файл кода:

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

Авторизация доступа к OneLake

В следующем примере создается клиент службы, подключенный к OneLake, который можно использовать для создания клиентов файловой системы для других операций. Для проверки подлинности в OneLake в этом примере используется DefaultAzureCredential для автоматического обнаружения учетных данных и получения правильного маркера проверки подлинности. Распространенные методы предоставления учетных данных для пакета SDK Azure включают использование команды az login в интерфейсе командной строки Azure или командлета Connect-AzAccount из 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

Дополнительные сведения об использовании DefaultAzureCredential для авторизации доступа к данным см. в статье "Обзор: проверка подлинности приложений Python в Azure с помощью пакета SDK Azure".

Работа с каталогами

Чтобы работать с каталогом в OneLake, создайте клиент файловой системы и клиент каталога. Этот клиент каталога можно использовать для выполнения различных операций, включая переименование, перемещение или перечисление путей (как показано в следующем примере). При создании каталога можно также создать клиент каталога с помощью метода 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')

Отправка файла

Содержимое можно передать в новый или существующий файл с помощью метода 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)

Пример

В следующем примере кода перечислены содержимое каталога любой папки в 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()

Чтобы запустить этот пример, сохраните предыдущий код в файл listOneLakeDirectory.py и выполните следующую команду в том же каталоге. Не забудьте заменить рабочую область и путь собственными значениями в примере.

python listOneLakeDirectory.py