แชร์ผ่าน


ใช้ Python เพื่อจัดการไฟล์และโฟลเดอร์ใน Microsoft OneLake

บทความนี้แสดงให้เห็นว่าคุณสามารถใช้ Azure Storage Python SDK เพื่อจัดการไฟล์และไดเรกทอรีใน OneLake ได้อย่างไร การฝึกปฏิบัตินี้ครอบคลุมเนื้อหา เดียวกันกับการใช้ Python เพื่อจัดการไดเรกทอรีและไฟล์ใน ADLS Gen2 และเน้นความแตกต่างเมื่อเชื่อมต่อกับ OneLake

ข้อกำหนดเบื้องต้น

ก่อนที่จะเริ่มต้นโครงการของคุณ ตรวจสอบให้แน่ใจว่าคุณมีข้อกําหนดเบื้องต้นต่อไปนี้:

  • พื้นที่ทํางานในผู้เช่า Fabric ของคุณที่มีสิทธิ์ผู้สนับสนุน
  • เลคเฮ้าส์ในพื้นที่ทํางาน อีกทางหนึ่งคือ ให้โหลดข้อมูลไว้ล่วงหน้าเพื่ออ่านโดยใช้ Python

ตั้งค่าโครงการของคุณ

จากไดเรกทอรีโครงการของคุณ ติดตั้งแพคเกจสําหรับ Azure Data Lake Storage และไลบรารีไคลเอ็นต์ Azure Identity OneLake สนับสนุน SDK เช่นเดียวกับ Azure Data Lake Storage (ADLS) Gen2 และรองรับการรับรองความถูกต้อง Microsoft Entra ซึ่งจัดหาโดยแพคเกจข้อมูลประจําตัว azure

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 รวมถึงการใช้คําสั่ง 'az login' ใน Azure Command Line Interface หรือ cmdlet '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 โดยใช้ Azure SDK

การทํางานกับไดเรกทอรี

เมื่อต้องการทํางานกับไดเรกทอรีใน 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