أساسيات المكتبة القياسية (الجزء 1)
واحدة من أعظم ميزات بايثون هي "البطاريات مشمولة" — مجموعة كاملة من المكتبات القياسية تأتي مع كل تثبيت بايثون. هذا الدرس يغطي أربعاً من أكثر الوحدات استخداماً:
random,time,sys, وos. حتى تعلم أشهر الدوال من كل منها سيساعدك في حل العديد من المشكلات الواقعية.
1. random — الأرقام العشوائية
import random
# رقم عشري عشوائي [0, 1)
print(random.random()) # 0.3745...
# عدد صحيح عشوائي [a, b] (شامل)
print(random.randint(1, 10)) # عدد صحيح عشوائي بين 1 و 10
# اختيار عشوائي
fruits = ["apple", "banana", "orange", "grape"]
print(random.choice(fruits)) # اختر واحداً عشوائياً
# عينة عشوائية (بدون استبدال)
print(random.sample(fruits, 2)) # اختر 2 عشوائياً
# خلط الترتيب
cards = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
random.shuffle(cards)
print(cards) # الترتيب مخلوط
مثال: برنامج اليانصيب (الصعوبة ⭐)
import random
# مجموعة اليانصيب
participants = ["Alice", "Bob", "Charlie", "Diana", "Eve",
"Frank", "Grace", "Henry"]
# الجائزة الأولى — فائز واحد
first = random.choice(participants)
print(f"🎉 1st Prize: {first}")
# الجائزة الثانية — فائزان (باستثناء الأول)
remaining = [p for p in participants if p != first]
second = random.sample(remaining, 2)
print(f"🎊 2nd Prize: {' & '.join(second)}")
# الجائزة الثالثة — 3 فائزين
remaining = [p for p in remaining if p not in second]
third = random.sample(remaining, 3)
print(f"🎁 3rd Prize: {' & '.join(third)}")
2. time — التعامل مع الوقت
import time
# الطابع الزمني الحالي (ثوانٍ منذ 1970-01-01)
print(time.time()) # 1758588800.123
# إيقاف التنفيذ (ثوانٍ)
print("Start")
time.sleep(1) # أوقف لثانية واحدة
print("1 second later")
# تنسيق الوقت الحالي
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 2026-06-23 16:00:00
مثال: الموقت (الصعوبة ⭐)
import time
def countdown(seconds):
"""موقت العد التنازلي"""
while seconds > 0:
print(f"\r⏱ {seconds} seconds left", end="")
time.sleep(1)
seconds -= 1
print("\r⏰ Time's up!")
# قياس وقت تنفيذ الكود
start = time.time()
total = sum(range(1000000))
end = time.time()
print(f"Execution time: {end - start:.4f} seconds")
3. sys — التفاعل مع النظام
import sys
# إصدار بايثون
print(sys.version) # 3.13.0 ...
# وسائط سطر الأوامر (عند تشغيل python script.py a b c)
print(sys.argv) # ['script.py', 'a', 'b', 'c']
# إنهاء البرنامج
# sys.exit(0) # خروج عادي
# الإدخال القياسي
# line = sys.stdin.readline() # اقرأ سطراً واحداً من الإدخال
مثال: آلة حاسبة لسطر الأوامر (الصعوبة ⭐⭐)
import sys
def main():
# الاستخدام: python calculator.py 3 + 5
if len(sys.argv) != 4:
print("Usage: python calculator.py num1 operator num2")
print("Example: python calculator.py 3 + 5")
return
a = float(sys.argv[1])
op = sys.argv[2]
b = float(sys.argv[3])
if op == "+":
result = a + b
elif op == "-":
result = a - b
elif op == "*":
result = a * b
elif op == "/":
if b == 0:
print("Error: cannot divide by zero")
return
result = a / b
else:
print(f"Unsupported operator: {op}")
return
print(f"{a} {op} {b} = {result}")
if __name__ == "__main__":
main()
4. os — نظام التشغيل
import os
# دليل العمل الحالي
print(os.getcwd()) # D:\project
# تغيير الدليل
# os.chdir("/tmp")
# اعرض محتويات الدليل
for item in os.listdir("."):
print(item)
# إنشاء دليل
# os.mkdir("new_folder")
# تحقق من المسارات
print(os.path.exists("test.txt")) # True
print(os.path.isfile("test.txt")) # True
print(os.path.isdir("data")) # True
# دمج المسارات
path = os.path.join("data", "files", "test.txt")
print(path) # data/files/test.txt
مثال: إعادة تسمية الملفات دفعة واحدة (الصعوبة ⭐⭐)
import os
def batch_rename(directory, prefix):
"""أعد تسمية جميع ملفات .txt في دليل دفعة واحدة"""
files = [f for f in os.listdir(directory) if f.endswith(".txt")]
for i, filename in enumerate(files, 1):
old_path = os.path.join(directory, filename)
new_name = f"{prefix}_{i:03d}.txt"
new_path = os.path.join(directory, new_name)
os.rename(old_path, new_path)
print(f" {filename} → {new_name}")
print("Batch rename example (display only, not executed):")
print("Iterate all .txt files, rename to prefix_001.txt format")
حالات الاستخدام الشائعة
- random: اليانصيب، CAPTCHA، توليد بيانات اختبار عشوائية، أحداث لعبة عشوائية.
- time: التنفيذ المؤجل، قياس الأداء، الموقتات، المهام المجدولة.
- sys: قراءة وسائط سطر الأوامر، التحكم في إنهاء البرنامج، الحصول على معلومات بيئة بايثون.
- os: إدارة الملفات، عمليات الدليل، معالجة المسارات، إعادة التسمية دفعة واحدة.
❓ أسئلة شائعة
random مناسب للأرقام العشوائية التشفيرية؟random يستخدم PRNG (مولد أرقام شبه عشوائية)، وهو قابل للتنبؤ. للأرقام العشوائية الآمنة تشفيرياً (مثل إنشاء كلمات المرور والرموز)، استخدم وحدة secrets.
س:time.sleep() يمنع البرنامج بأكمله. كيف أفعل تأخيراً غير مانع؟ ج:sleep() يمنع الخيط الحالي. للتأخيرات غير المانعة، استخدم تعدد الخيوط أو أطر العمل غير المتزامنة مثل asyncio. للسيناريوهات البسيطة، sleep() كافٍ.
س:هل يجب استخدام os أم pathlib؟ ج:بايثون 3.4+ توصي بـ pathlib (أكثر كائنية التوجه، أكثر بديهية)، لكن os أكثر انخفاضاً وأشمل. استخدم pathlib للمشاريع الجديدة؛ استخدم os لاستدعاءات النظام منخفضة المستوى.📖 ملخص
random:randint()،choice()،sample()،shuffle()— اختيار وتوليد عشوائيtime:time()طابع زمني،sleep()إيقاف،strftime()تنسيقsys:argvوسائط سطر الأوامر،exit()إنهاء البرنامجos: فحص مسارات الملفات، عمليات الدليل، إعادة تسمية الملفات- هذه الوحدات الأربع هي "حزمة البداية" للمكتبة القياسية لبايثون، تُستخدم بكثرة في التطوير اليومي
📝 تمارين
-
أساسي (الصعوبة ⭐): اكتب برنامجاً يُنشئ 10 أعداداً صحيحة عشوائية بين 1 و 100، ويُخرجها ومتوسطها.
-
متوسط (الصعوبة ⭐⭐): اكتب دالة توليد كلمة مرور
generate_password(length=8)تنشئ كلمات مرور عشوائية تحتوي على أحرف كبيرة وصغيرة وأرقام. تلميح: استخدمstring.ascii_letters + string.digitsكمجموعة الأحرف؛ استخدمrandom.choice()لاختيار الأحرف. -
تحدي (الصعوبة ⭐⭐⭐): اكتب "أداة إحصائيات المجلد." بالنظر إلى مسار دليل (مُمرّر عبر
sys.argv)، احسب عدد الملفات والحجم الإجمالي لكل نوع ملف (امتداد). تلميح: استخدمos.listdir()للتكرار،os.path.splitext()للامتداد،os.path.getsize()لحجم الملف.



