使用 Python 管理 Microsoft OneLake 中的文件和文件夹
本文介绍如何使用 Azure 存储 Python SDK 来管理 OneLake 中的文件和目录。 本演练介绍与使用 Python 管理 ADLS Gen2 中的目录和文件相同的内容,并强调了连接到 OneLake 时的差异。
先决条件
在启动项目之前,请确保具备以下先决条件:
- Fabric 租户中具有参与者权限的工作区。
- 工作区中的湖屋。 (可选)预加载数据以使用 Python 进行读取。
设置项目
从项目目录中,安装 Azure Data Lake Storage 和 Azure 标识客户端库的包。 OneLake 支持与 Azure Data Lake Storage (ADLS) Gen2 相同的 SDK,并支持由 azure-identity 包提供的 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 为其他操作创建文件系统客户端。 为了向 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