استخدم Python لإدارة الدلائل والملفات في Azure Data Lake Storage Gen2
توضح لك هذه المقالة كيفية استخدام Python لإنشاء الدلائل والملفات وإدارتها في حسابات التخزين التي تحتوي على مساحة أسماء هرمية.
للتعرف على كيفية الحصول على قوائم التحكم في الوصول (ACL) الخاصة بالدلائل والملفات وتعيينها وتحديثها، راجع استخدام Python لإدارة Azure CLI في Azure Data Lake Storage Gen2.
الحزمة (فهرس حزمة Python) | عينات | مرجع API | تعيين Gen1 إلى Gen2 | تقديم ملاحظات
المتطلبات الأساسية
اشتراك Azure. راجع الحصول على الإصدار التجريبي المجاني من Azure .
يحتوي حساب تخزين على مساحة اسم هرمية جرى تمكينها. اتبع هذه الإرشادات لإنشاء واحدة.
إعداد مشروعك
قم بتثبيت مكتبة عميل Azure Data Lake Storage لـ Python باستخدام PIP.
pip install azure-storage-file-datalake
أضف بيانات الاستيراد هذه إلى أعلى ملف التعليمات البرمجية خاصتك.
import os, uuid, sys
from azure.storage.filedatalake import DataLakeServiceClient
from azure.core._match_conditions import MatchConditions
from azure.storage.filedatalake._models import ContentSettings
اتصل بالحساب
لاستخدام القصاصات البرمجية الموجودة في هذه المقالة، ستحتاج إلى إنشاء مثيل DataLakeServiceClient يُمثل حساب التخزين.
الاتصال باستخدام مفتاح حساب
هذه هي الطريقة الأسهل للاتصال بحساب.
ننشئ في هذا المثال مثيل DataLakeServiceClient باستخدام مفتاح حساب.
def initialize_storage_account(storage_account_name, storage_account_key):
try:
global service_client
service_client = DataLakeServiceClient(account_url="{}://{}.dfs.core.windows.net".format(
"https", storage_account_name), credential=storage_account_key)
except Exception as e:
print(e)
استبدل
storage_account_nameقيمة العنصر النائب باسم حساب التخزين الخاص بك.استبدل قيمة العنصر النائب
storage_account_keyباسم مفتاح الاختصار لحساب التخزين خاصتك.
الاتصال باستخدام Azure Active Directory (Azure AD)
يمكنك استخدام مكتبة عميل هوية Azure لـ Python لمصادقة التطبيق خاصتك مع Azure AD.
ينشئ هذا المثال مثيل DataLakeServiceClient باستخدام معرّف العميل وسر العميل و معرّف المستأجر. للحصول على هذه القيم، راجع الحصول على رمز مميز من Azure AD لتخويل الطلبات من تطبيق عميل.
def initialize_storage_account_ad(storage_account_name, client_id, client_secret, tenant_id):
try:
global service_client
credential = ClientSecretCredential(tenant_id, client_id, client_secret)
service_client = DataLakeServiceClient(account_url="{}://{}.dfs.core.windows.net".format(
"https", storage_account_name), credential=credential)
except Exception as e:
print(e)
ملاحظة
لمزيد من الأمثلة، راجع مكتبة عميل هوية Azure للحصول على وثائق Python.
إنشاء حاوية
تعمل الحاوية كمنظم لملفاتك. يمكنك إنشاء واحدة عن طريق استدعاء أسلوب FileSystemDataLakeServiceClient.create_file_system.
هذا المثال ينشئ حاوية باسم my-file-system.
def create_file_system():
try:
global file_system_client
file_system_client = service_client.create_file_system(file_system="my-file-system")
except Exception as e:
print(e)
إنشاء دليل
إنشاء مرجع دليل عن طريق استدعاء الأسلوب DataLakeFileSystemClient.createDirectory.
يضيف هذا المثال دليلًا يسمى my-directory إلى حاوية.
def create_directory():
try:
file_system_client.create_directory("my-directory")
except Exception as e:
print(e)
إعادة تسمية دليل أو نقله
إعادة تسمية دليل أو نقله عن طريق استدعاء الأسلوب DataLakeDirectoryClient.rename. تمرير مسار الدليل المطلوب إلى معلمة.
يعيد هذا المثال تسمية دليل فرعي إلى الاسم my-directory-renamed.
def rename_directory():
try:
file_system_client = service_client.get_file_system_client(file_system="my-file-system")
directory_client = file_system_client.get_directory_client("my-directory")
new_dir_name = "my-directory-renamed"
directory_client.rename_directory(new_name=directory_client.file_system_name + '/' + new_dir_name)
except Exception as e:
print(e)
حذف دليل
حذف دليل عن طريق استدعاء الأسلوب DataLakeDirectoryClient.Delete.
هذا المثال يحذف دليلا يسمى my-directory.
def delete_directory():
try:
file_system_client = service_client.get_file_system_client(file_system="my-file-system")
directory_client = file_system_client.get_directory_client("my-directory")
directory_client.delete_directory()
except Exception as e:
print(e)
تحميل ملف إلى دليل
أولاً، قم بإنشاء مرجع ملف في الدليل المستهدف عن طريق إنشاء مثيل من فئة DataLakeFileClient. قم بتحميل ملف عن طريق استدعاء الأسلوب DataLakeFileClient.append. تأكد من اكتمال التحميل عن طريق استدعاء الأسلوب DataLakeFileClient.FlushAsync.
يقوم هذا المثال بتحميل ملف نصي إلى دليل يسمى my-directory.
def upload_file_to_directory():
try:
file_system_client = service_client.get_file_system_client(file_system="my-file-system")
directory_client = file_system_client.get_directory_client("my-directory")
file_client = directory_client.create_file("uploaded-file.txt")
local_file = open("C:\\file-to-upload.txt",'r')
file_contents = local_file.read()
file_client.append_data(data=file_contents, offset=0, length=len(file_contents))
file_client.flush_data(len(file_contents))
except Exception as e:
print(e)
تلميح
إذا كان حجم الملف الخاص بك كبيرًا، فسيتعين على التعليمات البرمجية إجراء استدعاءات متعددة إلى أسلوب DataLakeFileClient.append. فكر في استخدام الأسلوب DataLakeFileClient.UploadAsync كبديل. وبهذه الطريقة، يمكنك تحميل الملف بأكمله في استدعاء واحد.
تحميل ملف كبير إلى دليل
استخدم الأسلوب DataLakeFileClient.uploadFromFile لتحميل ملفات كبيرة دون الحاجة إلى إجراء مكالمات استدعاءات متعددة إلى الأسلوب DataLakeFileClient.append.
def upload_file_to_directory_bulk():
try:
file_system_client = service_client.get_file_system_client(file_system="my-file-system")
directory_client = file_system_client.get_directory_client("my-directory")
file_client = directory_client.get_file_client("uploaded-file.txt")
local_file = open("C:\\file-to-upload.txt",'r')
file_contents = local_file.read()
file_client.upload_data(file_contents, overwrite=True)
except Exception as e:
print(e)
تنزيل من دليل
افتح ملف محلي للكتابة. أولاً، قم بإنشاء مثيل DataLakeFileClient الذي يمثل الملف الذي تريد تنزيله. استدعاء DataLakeFileClient.read_file لقراءة بايت من الملف ثم كتابة هذه البايتات إلى الملف المحلي.
def download_file_from_directory():
try:
file_system_client = service_client.get_file_system_client(file_system="my-file-system")
directory_client = file_system_client.get_directory_client("my-directory")
local_file = open("C:\\file-to-download.txt",'wb')
file_client = directory_client.get_file_client("uploaded-file.txt")
download = file_client.download_file()
downloaded_bytes = download.readall()
local_file.write(downloaded_bytes)
local_file.close()
except Exception as e:
print(e)
قائمة محتويات الدليل
عرض محتويات الدليل في قائمة عن طريق استدعاء الأسلوب FileSystemClient.GetPathsAsync ثم الترقيم من خلال النتائج.
يقوم هذا المثال بطباعة أسماء كل دليل وملف موجود في دليل باسم my-directory.
def list_directory_contents():
try:
file_system_client = service_client.get_file_system_client(file_system="my-file-system")
paths = file_system_client.get_paths(path="my-directory")
for path in paths:
print(path.name + '\n')
except Exception as e:
print(e)