已啟用階層命名空間
的
儲存體帳戶。 請遵循
這些
指示來建立一個。
設定您的專案
本節將逐步引導您準備專案,以使用適用于 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 對應
提供意見反應