شارك المقالة

قراءة وكتابة الملفات في Python تصبح أسهل عندما تحدد المسار ونوع العملية والترميز قبل بدء المعالجة. سننشئ ملفًا جديدًا ونضيف إليه سطرًا ونقرأه، ثم نلاحظ حركة مؤشر القراءة. يستخدم المثال مجلدًا مؤقتًا للتجربة بدل مسار ثابت على قرص معين، فلا يعتمد على وجود D أو Download. يعمل النص العربي بترميز UTF-8، وتغلق الملفات عبر with حتى إذا حدث خطأ أثناء الكتابة أو القراءة.

التجهيز والتشغيل

استخدم Python 3.9 أو أحدث واحفظ المثال في ملف مستقل خارج مجلد مكتبات Python.

python lesson_25620.py

الفرق بين r وw وa وx

يفتح r ملفًا موجودًا للقراءة ويرفع خطأ إذا لم يوجد. ينشئ w الملف أو يفرغ محتواه الموجود قبل الكتابة، لذلك لا يصلح كخطوة فحص. يضيف a البيانات إلى النهاية وينشئ الملف عند غيابه، بينما يرفض x استبدال ملف موجود. نختار x في write_new للحفاظ على البيانات السابقة. لا تبدل الوضع إلى w لمجرد التخلص من FileExistsError دون مراجعة الملف الذي ستفقد محتواه.

المسار النسبي والترميز والأسطر

يتبع المسار النسبي مجلد تشغيل الأمر، لا مكان السكربت بالضرورة. استخدم pathlib لتكوين المسار أو مرر مسارًا كاملًا عند الحاجة، ولا تصل النصوص بفواصل خاصة بنظام واحد. تكتب الدالة كل سطر متبوعًا بمحرف newline الفعلي ، وليس الحرف n وحده. وتزيل read_lines محارف نهاية السطر فقط عبر rstrip، فلا تمحو حرف n من نهاية كلمة أو تغير الفراغات الداخلية التي قد تكون جزءًا من البيانات.

المثال البرمجي الكامل

from pathlib import Path
from tempfile import TemporaryDirectory

def write_new(path, lines):
    with Path(path).open("x", encoding="utf-8", newline="\n") as target:
        for line in lines:
            target.write(line + "\n")

def append_line(path, line):
    with Path(path).open("a", encoding="utf-8", newline="\n") as target:
        target.write(line + "\n")

def read_lines(path):
    with Path(path).open("r", encoding="utf-8") as source:
        return [line.rstrip("\r\n") for line in source]

if __name__ == "__main__":
    with TemporaryDirectory() as folder:
        path = Path(folder) / "notes.txt"
        write_new(path, ["Hello", "مرحبا"])
        append_line(path, "Python")
        print(read_lines(path))
        with path.open(encoding="utf-8") as source:
            print("Full text:", source.read())
            print("At EOF:", repr(source.readline()))
            source.seek(0)
            print("First line again:", source.readline().rstrip("\r\n"))

قراءة كاملة أم سطرًا بسطر؟

تعيد read النص من موضع المؤشر الحالي حتى النهاية، بينما تعيد readline السطر التالي وreadlines قائمة بالأسطر المتبقية. بعد قراءة الملف كاملًا يصبح المؤشر عند النهاية، فتكون قراءة تالية فارغة ما لم تستخدم seek للرجوع أو تفتح الملف مجددًا. عندما يكون الملف كبيرًا، المرور على source سطرًا بسطر يقلل الحاجة إلى تحميله كاملًا في الذاكرة، ما لم تجمع كل الأسطر لاحقًا في قائمة كما يفعل المثال الصغير.

ما الذي يحدث داخل التجربة؟

ينشئ TemporaryDirectory مجلد تجربة، ثم يكتب Hello ومرحبا ويضيف Python. تعرض القراءة قائمة بثلاثة أسطر، وبعد read يعرض readline سلسلة فارغة، ثم يعيد seek(0) المؤشر إلى البداية. عند مغادرة سياق المجلد المؤقت تزال ملفات التجربة تلقائيًا؛ إذا أردت نتيجة دائمة فاستخدم مجلدًا تختاره بدل المؤقت بعد فهم السلوك. لا تضع بيانات مهمة داخل مجلد التجربة وتنتظر بقاءها بعد نهاية البرنامج.

التعامل مع الأخطاء دون فقد البيانات

FileNotFoundError يشير إلى ملف أو مجلد أب غير موجود، وPermissionError قد يعني أن المسار غير قابل للكتابة أو أن السياسة تمنع العملية. UnicodeDecodeError قد ينتج عن ترميز مختلف، وليس بالضرورة ملفًا تالفًا. لا تستخدم errors="ignore" افتراضيًا لأن حذف الحروف قد يغير المعنى. راجع المصدر والترميز أو اقرأ bytes عندما يكون المحتوى ثنائيًا، وحدد ما تريد فعله إذا فشل الإلحاق بعد نجاح إنشاء الملف.

الكتابة لا تحفظ قائمة Python تلقائيًا

تستقبل write نصًا وتعيد عدد المحارف المكتوبة؛ لا تحول قائمة أو قاموسًا إلى صيغة بيانات مشتركة بمجرد طباعة تمثيلهما. للنصوص المنظمة استخدم JSON أو CSV وفق شكل البيانات، مع الترميز المناسب. ولا تعني close أن لديك نسخة احتياطية أو معاملة ذرية متعددة الملفات؛ التطبيقات التي تستبدل ملفات مهمة قد تحتاج ملفًا مؤقتًا واستبدالًا منظمًا ونسخة قابلة للاستعادة. هذا المثال يشرح أساسيات مورد واحد.

تجارب تثبت فهم المؤشر

أضف سطرًا فارغًا ونصًا ينتهي بحرف n ثم قارن read_lines بما تتوقعه. جرب write_new مرتين على المسار نفسه وتأكد من أن الثانية ترفض الاستبدال، ثم افتح الملف وتحقق أن المحاولة لم تمح النص. جرّب read(1) ثم readline لتلاحظ أن أول حرف قد استهلك. فصل هذه التجارب عن ملفات المستخدم الحقيقية يجعل مراجعة الأوضاع أسهل، ويمهد لقراءة JSON ومعالجة الأخطاء في الدروس التالية.

المراجع

الإدخال والإخراج والملفات

الصور والفيديو من الشرح السابق

الكود النصي أعلاه هو النسخة المصححة؛ قد تختلف المواد المرئية السابقة في أسماء المتغيرات أو طريقة التشغيل.

اهم الاوامر المستخدمه للتعامل مع ملفات الجهاز بالبايثون كيفية فتح ملف والكتابة بداخلة عن طريق لغة بايثون كيقية قراءة محتويات ملف باستخدام python اضافة نصوص داخل ملف text بلغة بايثون كيفية طباعة محتوى نصي الف مره باستخدام بايثون كيفية طباعة محتويات الملف عن طريق ألبايثون كيفية طباعة متحويات معينه من داخل نص في بايثون
شاهد أيضًا
مقالات ذات صلة
🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع