添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

本文說明如何使用 Python,在具有階層命名空間的儲存體帳戶中建立和管理目錄和檔案。

若要瞭解如何取得、設定及更新目錄和檔案的存取控制清單(ACL),請參閱 使用 Python 來管理 Azure Data Lake 儲存體 Gen2 中的 ACL。

套件 (PyPi) | 範例 | API 參考 | Gen1 與 Gen2 對應 | 提供意見反應

  • Azure 訂用帳戶。 請參閱 取得 Azure 免費試用 。

  • 已啟用階層命名空間 的 儲存體帳戶。 請遵循 這些 指示來建立一個。

    設定您的專案

    本節將逐步引導您準備專案,以使用適用于 Python 的 Azure Data Lake 儲存體 用戶端程式庫。

    從您的專案目錄中,使用 pip install 命令安裝 Azure Data Lake 儲存體 和 Azure Identity 用戶端程式庫的套件。 不需要 azure 身分 識別套件,才能對 Azure 服務進行無密碼連線。

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

    然後開啟程式碼檔案,並新增必要的匯入語句。 在此範例中,我們會將下列內容新增至 . py 檔案:

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

    授權存取權並聯機至資料資源

    若要使用本文中的程式碼範例,您必須建立代表儲存體帳戶的授權 DataLakeServiceClient 實例。 您可以使用 Microsoft Entra ID、帳戶存取金鑰或共用存取簽章 (SAS) 來授權 DataLakeServiceClient 物件。

    您可以使用適用于 Python 的 Azure 身分識別用戶端程式庫,以 Microsoft Entra ID 驗證您的應用程式。

    建立 DataLakeServiceClient 類別的 實例,並傳入 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

    若要深入瞭解如何使用 DefaultAzureCredential 來授權存取資料,請參閱 概觀:使用 Azure SDK 向 Azure 驗證 Python 應用程式。

    若要使用共用存取簽章 (SAS) 權杖,請提供權杖做為字串,並初始化 DataLakeServiceClient 物件。 如果您的帳戶 URL 包含 SAS 權杖,請省略認證參數。

    def get_service_client_sas(self, account_name: str, sas_token: str) -> DataLakeServiceClient: account_url = f"https://{account_name}.dfs.core.windows.net" # The SAS token string can be passed in as credential param or appended to the account URL service_client = DataLakeServiceClient(account_url, credential=sas_token) return service_client

    若要深入瞭解如何產生和管理 SAS 權杖,請參閱下列文章:

  • 使用共用存取簽章 (SAS) 對 Azure 儲存體資源授與有限存取權
  • 您可以使用您的帳戶存取金鑰(共用金鑰)來授權存取資料。 下列程式碼範例會 建立具有帳戶金鑰授權的 DataLakeServiceClient 實例:

    def get_service_client_account_key(self, account_name, account_key) -> DataLakeServiceClient: account_url = f"https://{account_name}.dfs.core.windows.net" service_client = DataLakeServiceClient(account_url, credential=account_key) return service_client

    不建議使用共用金鑰進行授權,因為它可能較不安全。 為了獲得最佳安全性,請停用透過儲存體帳戶的共用金鑰進行授權,如防止Azure 儲存體帳戶 的共用金鑰授權中所述 。

    使用存取金鑰和連接字串應僅限於未存取生產或敏感性資料之概念應用程式或開發原型的初始證明。 否則,在向 Azure 資源進行驗證時,Azure SDK 中提供的權杖型驗證類別應該一律優先使用。

    Microsoft 建議用戶端使用 Microsoft Entra ID 或共用存取簽章 (SAS) 來授權存取Azure 儲存體中的資料。 如需詳細資訊,請參閱 授權資料存取 作業。

    容器可作為檔案的檔案系統。 您可以使用下列方法來建立容器:

  • DataLakeServiceClient.create_file_system
  • 下列程式碼範例會建立容器,並傳 FileSystemClient 回 物件以供稍後使用:

    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

    您可以使用下列方法在容器中建立目錄參考:

  • FileSystemClient.create_directory
  • 下列程式碼範例會將目錄新增至容器,並傳 DataLakeDirectoryClient 回 物件以供稍後使用:

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

    重新命名目錄或移動目錄

    您可以使用下列方法來重新命名或移動目錄:

  • DataLakeDirectoryClient.rename_directory
  • 在 引數中 new_name 傳遞具有新目錄名稱的路徑。 值必須具有下列格式:{filesystem}/{directory}/{subdirectory}。

    下列程式碼範例示範如何重新命名子目錄:

    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}")

    將檔案上傳至目錄

    您可以使用下列方法,將內容上傳至新的或現有的檔案:

  • DataLakeFileClient.upload_data
  • 下列程式碼範例示範如何使用 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)

    您可以使用這個方法來建立內容,並將內容上傳至新檔案,也可以將 引數 True 設定 overwrite 為 以覆寫現有的檔案。

    將資料附加至檔案

    您可以使用下列方法上傳要附加至檔案的資料:

  • DataLakeFileClient.append_data 方法。
  • 下列程式碼範例示範如何使用下列步驟將資料附加至檔案結尾:

  • 建立 DataLakeFileClient 物件來代表您正在使用的檔案資源。
  • 使用 append_data 方法將資料上傳至檔案。
  • 呼叫 flush_data 方法來完成上傳,以將先前上傳的資料寫入檔案。
  • 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))

    使用此方法時,資料只能附加至檔案,且作業限制為每個要求 4000 MiB。

    從目錄下載

    下列程式碼範例示範如何使用下列步驟,將檔案從目錄下載到本機檔案:

  • 建立 DataLakeFileClient 物件來代表您要下載的檔案。
  • 開啟本機檔案以進行寫入。
  • 呼叫 DataLakeFileClient.download_file 方法來讀取檔案,然後將資料寫入本機檔案。
  • 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()

    列出目錄內容

    您可以使用下列方法來列出目錄內容,並列舉結果:

  • FileSystemClient.get_paths
  • 列舉結果中的路徑可能會在擷取值時對服務提出多個要求。

    下列程式碼範例會列印位於目錄中之每個子目錄和檔案的路徑:

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

    您可以使用下列方法來刪除目錄:

  • DataLakeDirectoryClient.delete_directory
  • 下列程式碼範例示範如何刪除目錄:

    def delete_directory(self, directory_client: DataLakeDirectoryClient): directory_client.delete_directory()
  • API 參考檔
  • Azure 檔案 Data Lake 儲存體用戶端程式庫 (Python 套件索引)
  • Gen1 到 Gen2 對應
  • 提供意見反應
  •