共用方式為


使用 Python 管理 Microsoft OneLake 中的檔案和資料夾

本文章說明如何使用 Azure 儲存體 Python SDK 來管理 OneLake 中的檔案和目錄。 本逐步解說會講解與使用 Python 來管理 ADLS Gen2 中的目錄和檔案相同的內容,並重點說明連線至 OneLake 時的差異。

必要條件

開始進行專案前,請務必確認您具備下列先決條件:

  • Fabric 租用戶中具有參與者權限的工作區。
  • 工作區中的 Lakehouse。 您也可以選擇性的預先載入資料,以使用 Python 進行讀取。

設定您的專案

從您的專案目錄中,安裝 Azure Data Lake Storage 和 Azure 身分識別用戶端程式庫的套件。 OneLake 支援與 Azure Data Lake Storage (ADLS) Gen2 相同的 SDK,並支援 Azure 身分識別套件所提供的 Microsoft Entra 驗證。

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 來自動偵測認證,並取得正確的驗證權杖。 提供 Azure SDK 認證的常見方法,包括使用 Azure 命令列介面中的 'az login' 命令,或 Azure PowerShell 中的 'Connect-AzAccount' Cmdlet。

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 來授權存取資料,請參閱概觀:使用 Azure SDK 向 Azure 驗證 Python 應用程式

使用目錄

若要在 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