استخدم Python لإدارة الدلائل والملفات في Azure Data Lake Storage Gen2

توضح لك هذه المقالة كيفية استخدام Python لإنشاء الدلائل والملفات وإدارتها في حسابات التخزين التي تحتوي على مساحة أسماء هرمية.

للتعرف على كيفية الحصول على قوائم التحكم في الوصول (ACL) الخاصة بالدلائل والملفات وتعيينها وتحديثها، راجع استخدام Python لإدارة Azure CLI في Azure Data Lake Storage Gen2.

حزمة (PyPi) | عينات | مرجع | واجهة برمجة التطبيقات Gen1 إلى تعيين | Gen2 تقديم ملاحظات

المتطلبات الأساسية

إعداد مشروعك

يرشدك هذا القسم خلال إعداد مشروع للعمل مع مكتبة عميل Azure Data Lake Storage ل Python.

من دليل المشروع الخاص بك، قم بتثبيت الحزم لمكتبات عميل Azure Data Lake Storage وAzure Identity باستخدام pip install الأمر . حزمة azure-identity مطلوبة للاتصالات بدون كلمة مرور بخدمات 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

إشعار

يتيح الوصول متعدد البروتوكولات على Data Lake Storage للتطبيقات استخدام كل من واجهات برمجة تطبيقات Blob وواجهات برمجة تطبيقات Data Lake Storage Gen2 للعمل مع البيانات في حسابات التخزين مع تمكين مساحة الاسم الهرمية (HNS). عند العمل مع قدرات فريدة من نوعها ل Data Lake Storage Gen2، مثل عمليات الدليل و ACLs، استخدم واجهات برمجة تطبيقات Data Lake Storage Gen2، كما هو موضح في هذه المقالة.

عند اختيار واجهات برمجة التطبيقات التي يجب استخدامها في سيناريو معين، ضع في اعتبارك حمل العمل واحتياجات التطبيق الخاص بك، بالإضافة إلى المشكلاتالمعروفة وتأثير HNS على أحمال العمل والتطبيقات.

تخويل الوصول إلى موارد البيانات والاتصال بها

للعمل مع أمثلة التعليمات البرمجية في هذه المقالة، تحتاج إلى إنشاء مثيل DataLakeServiceClient معتمد يمثل حساب التخزين. يمكنك تخويل كائن DataLakeServiceClient باستخدام معرف Microsoft Entra أو مفتاح الوصول إلى الحساب أو توقيع وصول مشترك (SAS).

يمكنك استخدام مكتبة عميل هوية Azure ل Python لمصادقة التطبيق الخاص بك باستخدام معرف Microsoft Entra.

إنشاء مثيل من فئة 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 لتخويل الوصول إلى البيانات، راجع نظرة عامة: مصادقة تطبيقات Python إلى Azure باستخدام Azure SDK.

إنشاء حاوية

تعمل الحاوية كنظام ملفات لملفاتك. يمكنك إنشاء حاوية باستخدام الأسلوب التالي:

ينشئ مثال التعليمات البرمجية التالي حاوية ويعيد كائنا 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

إنشاء دليل

يمكنك إنشاء مرجع دليل في الحاوية باستخدام الأسلوب التالي:

يضيف مثال التعليمات البرمجية التالي دليلا إلى حاوية ويعيد كائنا 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

إعادة تسمية دليل أو نقله

يمكنك إعادة تسمية دليل أو نقله باستخدام الأسلوب التالي:

مرر المسار باسم الدليل الجديد في الوسيطة 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}")

تحميل ملف إلى دليل

يمكنك تحميل المحتوى إلى ملف جديد أو موجود باستخدام الأسلوب التالي:

يوضح مثال التعليمات البرمجية التالي كيفية تحميل ملف إلى دليل باستخدام أسلوب 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)

يمكنك استخدام هذا الأسلوب لإنشاء محتوى وتحميله إلى ملف جديد، أو يمكنك تعيين الوسيطة overwrite للكتابة True فوق ملف موجود.

إلحاق البيانات بالملف

يمكنك تحميل البيانات ليتم إلحاقها بملف باستخدام الأسلوب التالي:

  • أسلوب 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 ميجابايت لكل طلب.

تنزيل من دليل

يوضح مثال التعليمات البرمجية التالي كيفية تنزيل ملف من دليل إلى ملف محلي باستخدام الخطوات التالية:

  • قم بإنشاء كائن 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()

إعداد قائمة محتويات الدليل

يمكنك سرد محتويات الدليل باستخدام الأسلوب التالي وتعداد النتيجة:

قد يؤدي تعداد المسارات في النتيجة إلى تقديم طلبات متعددة إلى الخدمة أثناء إحضار القيم.

يطبع مثال التعليمات البرمجية التالي مسار كل دليل فرعي وملف موجود في دليل:

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

حذف دليل

يمكنك حذف دليل باستخدام الأسلوب التالي:

يوضح مثال التعليمات البرمجية التالي كيفية حذف دليل:

def delete_directory(self, directory_client: DataLakeDirectoryClient):
    directory_client.delete_directory()

(راجع أيضًا )