الفصل الحادي عشر: مكتبة بايثون القياسية – أدواتك المدمجة
مقدمة الفصل
واحدة من أعظم نقاط القوة في لغة بايثون هي أنها تأتي “مع بطاريات مدمجة”. هذا يعني أنها لا توفر لك أساسيات اللغة فحسب، بل تأتي أيضًا مع مجموعة ضخمة من الأدوات الجاهزة للاستخدام تسمى مكتبة بايثون القياسية (Python Standard Library).
هذه المكتبة هي مجموعة من الوحدات (Modules) التي يمكنك استيرادها في برامجك لأداء مهام متخصصة دون الحاجة لكتابة الكود من الصفر. في هذا الفصل، سنستكشف بعضًا من أهم وأكثر هذه الوحدات استخدامًا، والتي ستحتاجها في العديد من مشاريعك المستقبلية.
1. ما هي الوحدة وكيف نستخدمها؟
الوحدة هي ببساطة ملف بايثون (.py
) يحتوي على دوال، كلاسات، ومتغيرات جاهزة للاستخدام. لاستخدام أي وحدة، يجب أولاً “استيرادها” في بداية ملفك باستخدام الكلمة المفتاحية import
.
# To use the math module, we must import it first
# لاستخدام وحدة math، يجب استيرادها أولاً
import math
# Now we can use functions and constants from the math module
# الآن يمكننا استخدام الدوال والثوابت من وحدة math
print(math.pi) # طباعة قيمة الثابت باي (pi)
شرح الكود بالتفصيل:
import math
: هذا السطر يخبر بايثون بأننا نريد استخدام الأدوات الموجودة في الوحدة التي اسمهاmath
.math.pi
: للوصول إلى دالة أو متغير داخل وحدة، نكتب اسم الوحدة، متبوعًا بنقطة (.
)، ثم اسم الأداة التي نريدها. هنا،pi
هو ثابت (متغير) معرف مسبقًا داخل وحدةmath
ويحتوي على قيمة تقريبية للعدد باي.
2. استكشاف وحدات قياسية مهمة
أ. وحدة math
: للعمليات الرياضية المتقدمة
توفر هذه الوحدة دوالًا رياضية تتجاوز العمليات الحسابية الأساسية.
import math
number = 16
square_root = math.sqrt(number) # حساب الجذر التربيعي للرقم
print(f"The square root of {number} is {square_root}")
power_result = math.pow(2, 3) # حساب القوة (2 أس 3)
print(f"2 to the power of 3 is {power_result}")
factorial_result = math.factorial(5) # حساب المضروب (5!)
print(f"The factorial of 5 is {factorial_result}")
شرح الكود بالتفصيل:
math.sqrt
: دالة لحساب الجذر التربيعي.math.pow
: دالة لحساب الأس (مشابهة للعامل**
).math.factorial
: دالة لحساب مضروب العدد (5! = 5 * 4 * 3 * 2 * 1).
ب. وحدة random
: للعشوائية
هذه الوحدة أساسية في بناء الألعاب، والمحاكاة، أو عند الحاجة إلى اختيار عينات عشوائية.
import random
# Generate a random integer between 1 and 100 (inclusive)
# توليد عدد صحيح عشوائي بين 1 و 100
random_integer = random.randint(1, 100)
print(f"A random integer: {random_integer}")
# Pick a random element from a list
# اختيار عنصر عشوائي من قائمة
players = ["Ahmed", "Sara", "Ali", "Fatima"]
winner = random.choice(players)
print(f"The winner is: {winner}")
شرح الكود بالتفصيل:
random.randint
: تأخذ رقمين وتعيد عددًا صحيحًا عشوائيًا بينهما (بما في ذلك الرقمين نفسيهما).random.choice
: تأخذ قائمة كمدخل وتعيد عنصرًا واحدًا منها بشكل عشوائي.
ج. وحدة datetime
: للتعامل مع الوقت والتاريخ
هذه الوحدة لا غنى عنها عند التعامل مع أي بيانات تتعلق بالوقت، مثل تسجيل وقت حدوث عملية ما أو حساب المدد الزمنية.
import datetime
# Get the current date and time
# الحصول على الوقت والتاريخ الحاليين
current_moment = datetime.datetime.now()
print(f"Current date and time: {current_moment}")
# Get today's date only
# الحصول على تاريخ اليوم فقط
today_date = datetime.date.today()
print(f"Today's date is: {today_date}")
# Format the date and time into a readable string
# تنسيق الوقت والتاريخ في نص مقروء
formatted_time = current_moment.strftime("%Y-%m-%d %H:%M:%S")
print(f"Formatted time: {formatted_time}")
شرح الكود بالتفصيل:
datetime.datetime.now
: تعيد كائنًا يحتوي على كل تفاصيل اللحظة الحالية (السنة، الشهر، اليوم، الساعة، الدقيقة، الثانية).datetime.date.today
: تعيد كائنًا يحتوي على تاريخ اليوم فقط.strftime
: هي دالة قوية جدًا تستخدم لتنسيق كائن الوقت والتاريخ وتحويله إلى نص بالشكل الذي تريده. الرموز مثل%Y
(للسنة الكاملة) و%m
(للشهر) هي رموز تنسيق قياسية.
د. وحدة os
: للتفاعل مع نظام التشغيل
تسمح لك هذه الوحدة بالقيام بعمليات تتعلق بنظام التشغيل، مثل التعامل مع الملفات والمجلدات.
import os
# Get the current working directory
# الحصول على مجلد العمل الحالي
current_directory = os.getcwd()
print(f"I am currently in this directory: {current_directory}")
# List all files and directories in the current directory
# عرض كل الملفات والمجلدات في المسار الحالي
try:
print("Contents of the directory:")
print(os.listdir('.')) # '.' تشير إلى المجلد الحالي
except Exception as e:
print(f"Could not list directory contents: {e}")
شرح الكود بالتفصيل:
os.getcwd
: دالة تعيد مسار المجلد الذي يتم تشغيل سكربت بايثون منه. (cwd
هي اختصار لـ Current Working Directory).os.listdir
: دالة تعيد قائمة تحتوي على أسماء كل الملفات والمجلدات الموجودة في المسار الذي تحدده.
3. تمرين تطبيقي: إنشاء ملف سجل زمني (Log File)
المطلوب:
كتابة برنامج يقوم بإنشاء أو الإضافة إلى ملف سجل اسمه app_log.txt
. في كل مرة يتم فيها تشغيل البرنامج، يجب أن يضيف سطرًا جديدًا إلى الملف يحتوي على التاريخ والوقت الحاليين ورسالة تفيد بأن “التطبيق بدأ العمل”.
إرشادات الحل:
- استيراد الوحدات اللازمة: ستحتاج إلى وحدة
datetime
للحصول على الوقت والتاريخ. - الحصول على الوقت الحالي: استخدم دالة
datetime.datetime.now
للحصول على كائن الوقت الحالي. - تنسيق الوقت: استخدم دالة
strftime
لتحويل كائن الوقت إلى نص منسق وواضح (مثلاً:2025-06-28 16:30:00
). - إنشاء رسالة السجل: قم بإنشاء سلسلة نصية (string) تحتوي على الوقت المنسق والرسالة المطلوبة.
- فتح الملف والكتابة فيه: افتح الملف
app_log.txt
في وضع الإضافة ('a'
)، وتأكد من استخدامencoding="utf-8"
. اكتب رسالة السجل التي أنشأتها متبوعة برمز السطر الجديد\n
. - إعلام المستخدم: اطبع رسالة على الشاشة تفيد بأن السجل قد تم تحديثه بنجاح.
الحل المقترح خطوة بخطوة:
الخطوة 1: استيراد الوحدة والحصول على الوقت
# 1. Import the datetime module
# 1. استيراد وحدة datetime
import datetime
# 2. Get the current date and time
# 2. الحصول على الوقت والتاريخ الحاليين
now = datetime.datetime.now()
شرح الخطوة 1:
نبدأ باستيراد وحدة datetime
لتكون أدواتها متاحة لنا. ثم نستدعي دالة now
من داخلها للحصول على اللحظة الحالية ونخزنها في المتغير now
.
الخطوة 2: تنسيق الوقت وإنشاء رسالة السجل
# 3. Format the current time into a string
# 3. تنسيق الوقت الحالي إلى نص
formatted_timestamp = now.strftime("%Y-%m-%d %H:%M:%S")
# 4. Create the log message
# 4. إنشاء رسالة السجل
log_message = f"[{formatted_timestamp}] Application started.\n"
شرح الخطوة 2:
نستخدم دالة strftime
لتحويل الوقت من كائن بايثون إلى نص يمكن كتابته في ملف. ثم نستخدم f-string لدمج هذا الوقت المنسق مع رسالة السجل. أضفنا \n
في نهاية الرسالة لضمان أن كل سجل جديد سيكون على سطر منفصل.
الخطوة 3: كتابة الرسالة في الملف
# 5. Open the log file in append mode and write the message
# 5. فتح ملف السجل في وضع الإضافة وكتابة الرسالة
try:
with open("app_log.txt", "a", encoding="utf-8") as log_file:
log_file.write(log_message)
# 6. Inform the user
# 6. إعلام المستخدم
print("Log file has been updated successfully.")
except Exception as e:
print(f"Failed to write to log file: {e}")
شرح الخطوة 3:
هذا هو الجزء الرئيسي. نفتح الملف app_log.txt
في وضع الإضافة 'a'
. نستخدم with
لضمان الإغلاق التلقائي. ثم نستخدم دالة write
لكتابة رسالة السجل التي قمنا بإعدادها. أخيرًا، نطبع رسالة تأكيد للمستخدم.
الكود الكامل المجمع:
# --- Timestamped Log File Creator ---
# 1. Import the datetime module
import datetime
# 2. Get the current date and time
now = datetime.datetime.now()
# 3. Format the current time into a string
formatted_timestamp = now.strftime("%Y-%m-%d %H:%M:%S")
# 4. Create the log message
log_message = f"[{formatted_timestamp}] Application started.\n"
# 5. Open the log file in append mode and write the message
try:
with open("app_log.txt", "a", encoding="utf-8") as log_file:
log_file.write(log_message)
# 6. Inform the user
print("Log file has been updated successfully.")
except Exception as e:
print(f"Failed to write to log file: {e}")
4. خلاصة الفصل
- مكتبة بايثون القياسية هي كنز من الأدوات الجاهزة التي تسرّع عملية التطوير بشكل كبير.
- تعرفنا على وحدات أساسية مثل
math
للرياضيات، وrandom
للعشوائية، وdatetime
للوقت، وos
لنظام التشغيل. - لاستخدام أي وحدة، يجب أولاً استيرادها باستخدام
import
.
ماذا بعد؟
رغم قوة المكتبة القياسية، إلا أن القوة الحقيقية لمجتمع بايثون تكمن في آلاف المكتبات الخارجية التي طورها المبرمجون حول العالم. في الفصل الثاني عشر، سنتعلم كيفية تثبيت هذه المكتبات الخارجية واستخدامها لبناء تطبيقات أكثر قوة وتخصصًا.