الدرس 19 من 20

بنية المشروع

العمل مع الملفات

2 دقيقة للقراءة

عمليات الملفات ضرورية لمشاريع الذكاء الاصطناعي—قراءة المطالبات وحفظ الاستجابات وإدارة التكوينات ومعالجة البيانات.

قراءة الملفات

# قراءة ملف أساسية مع مدير السياق
with open("prompt.txt", "r") as f:
    content = f.read()

# قراءة الأسطر في قائمة
with open("data.txt", "r") as f:
    lines = f.readlines()  # تتضمن \n
    # أو: lines = f.read().splitlines()  # بدون \n

# قراءة سطر بسطر (فعّال للذاكرة)
with open("large_file.txt", "r") as f:
    for line in f:
        process(line.strip())

كتابة الملفات

# كتابة نص إلى ملف
with open("output.txt", "w") as f:
    f.write("مرحباً، عالم!\n")
    f.write("السطر الثاني\n")

# الإلحاق بملف موجود
with open("log.txt", "a") as f:
    f.write(f"إدخال جديد: {message}\n")

# كتابة أسطر متعددة
lines = ["السطر 1", "السطر 2", "السطر 3"]
with open("output.txt", "w") as f:
    f.writelines(line + "\n" for line in lines)

استخدام pathlib (النهج الحديث)

from pathlib import Path

# إنشاء كائن المسار
file_path = Path("data") / "prompts" / "system.txt"

# التحقق من الوجود
if file_path.exists():
    content = file_path.read_text()

# الكتابة إلى ملف
output_path = Path("output") / "response.txt"
output_path.parent.mkdir(parents=True, exist_ok=True)
output_path.write_text("استجابة الذكاء الاصطناعي هنا")

# عرض الملفات في دليل
for file in Path("prompts").glob("*.txt"):
    print(file.name)

عمليات المسار الشائعة

from pathlib import Path

path = Path("/home/user/project/data/file.json")

path.name        # "file.json"
path.stem        # "file"
path.suffix      # ".json"
path.parent      # Path("/home/user/project/data")
path.exists()    # True/False
path.is_file()   # True/False
path.is_dir()    # True/False

# ضم المسارات
config_path = Path("config") / "settings.json"

# الحصول على المسار المطلق
absolute = path.resolve()

مثال عملي للذكاء الاصطناعي

from pathlib import Path
import json

class PromptManager:
    def __init__(self, prompts_dir="prompts"):
        self.prompts_dir = Path(prompts_dir)
        self.prompts_dir.mkdir(exist_ok=True)

    def save_prompt(self, name, content):
        path = self.prompts_dir / f"{name}.txt"
        path.write_text(content)

    def load_prompt(self, name):
        path = self.prompts_dir / f"{name}.txt"
        if path.exists():
            return path.read_text()
        return None

    def list_prompts(self):
        return [p.stem for p in self.prompts_dir.glob("*.txt")]

# الاستخدام
manager = PromptManager()
manager.save_prompt("system", "أنت مساعد مفيد.")
prompts = manager.list_prompts()

ترميزات الملفات

# تحديد الترميز (مهم للنصوص غير ASCII)
with open("arabic.txt", "r", encoding="utf-8") as f:
    content = f.read()

# أو مع pathlib
content = Path("arabic.txt").read_text(encoding="utf-8")

بعد ذلك، سنتعلم التعبيرات النمطية لمعالجة النصوص. :::

اختبار

الوحدة 5: بنية المشروع

خذ الاختبار