التعامل مع الملفات في Python: القراءة والكتابة
كل البرامج التي كتبتها حتى الآن تنسى كل شيء عند إغلاقها: المتغيرات تعيش في ذاكرة الكمبيوتر المؤقتة، وتختفي بانتهاء البرنامج. في هذا الدرس ستتعلم كيف تحفظ البيانات في ملف (File) على القرص، فتبقى موجودة بعد إغلاق البرنامج، وتقرؤها متى أردت.
فتح ملف والكتابة فيه
Section titled “فتح ملف والكتابة فيه”تخيّل الملف مثل دفتر في درج مكتبك: تفتحه أولاً، ثم تكتب فيه أو تقرأ منه، ثم تغلقه. في Python نفتح الملف بالدالة open، ونعطيها اسم الملف ووضع الفتح (Mode):
with open("notes.txt", "w", encoding="utf-8") as file: file.write("اشترِ الخبز\n") file.write("ذاكر درس Python\n")
print("تم الحفظ")تم الحفظبعد تشغيل الكود ستجد ملفاً جديداً اسمه notes.txt بجانب ملف برنامجك، وفيه سطران. لنفهم ما كتبناه:
"w"اختصار write، أي الكتابة. إذا لم يكن الملف موجوداً فستنشئه Python.encoding="utf-8"يحدد الترميز (Encoding)، أي طريقة تحويل الحروف إلى بيانات. الترميزutf-8يدعم العربية وكل اللغات.as fileيعطي الملف المفتوح اسماً نستخدمه داخل البلوك.file.writeتكتب النص كما هو، ولا تضيف سطراً جديداً مثلprint، لذلك كتبنا\nفي آخر كل سطر.
قراءة ملف
Section titled “قراءة ملف”للقراءة نستخدم الوضع "r" (اختصار read). والدالة read تعيد محتوى الملف كله في نص واحد:
with open("notes.txt", "r", encoding="utf-8") as file: content = file.read()
print(content)اشترِ الخبزذاكر درس Pythonالوضع "r" هو الوضع الافتراضي، فيمكنك حذفه وكتابة open("notes.txt", encoding="utf-8") فقط.
القراءة سطراً سطراً
Section titled “القراءة سطراً سطراً”غالباً تريد التعامل مع كل سطر وحده. الملف المفتوح يمكن المرور عليه بحلقة for مباشرة، وفي كل دورة تحصل على سطر:
with open("notes.txt", encoding="utf-8") as file: for line in file: print("-", line.strip())- اشترِ الخبز- ذاكر درس Pythonكل سطر تقرؤه ينتهي بالرمز \n الذي كتبناه، ولذلك استخدمنا strip() لحذفه. بدونها سيظهر سطر فارغ بعد كل سطر.
الإضافة إلى ملف موجود
Section titled “الإضافة إلى ملف موجود”انتبه: الوضع "w" يمسح محتوى الملف القديم ويبدأ من الصفر. إذا أردت أن تضيف في آخر الملف دون مسح ما فيه، استخدم الوضع "a" (اختصار append):
with open("notes.txt", "a", encoding="utf-8") as file: file.write("اتصل بجدتك\n")
with open("notes.txt", encoding="utf-8") as file: lines = file.readlines()
print(len(lines))print(lines[2].strip())3اتصل بجدتكالدالة readlines تعيد قائمة فيها كل سطور الملف، فتستطيع عدّها أو الوصول لسطر معيّن بفهرسه.
| الوضع | المعنى | إذا كان الملف موجوداً | إذا لم يكن موجوداً |
|---|---|---|---|
"r" |
قراءة | يقرؤه | خطأ FileNotFoundError |
"w" |
كتابة | يمسح محتواه | ينشئه |
"a" |
إضافة | يكتب في آخره | ينشئه |
ماذا لو لم يكن الملف موجوداً؟
Section titled “ماذا لو لم يكن الملف موجوداً؟”إذا حاولت قراءة ملف غير موجود فستتوقف Python بخطأ FileNotFoundError. وقد تعلمت في الدرس السابق كيف تلتقط الأخطاء:
try: with open("missing.txt", encoding="utf-8") as file: print(file.read())except FileNotFoundError: print("الملف غير موجود")الملف غير موجودهذا النمط مهم جداً: في أول تشغيل لبرنامجك لن يكون ملف البيانات موجوداً بعد، فلا يصح أن ينهار البرنامج بسبب ذلك.
مثال عملي: حفظ الدرجات
Section titled “مثال عملي: حفظ الدرجات”الملف النصي يخزّن نصوصاً فقط. فإذا أردت حفظ أرقام، حوّلها إلى نص عند الكتابة بـ str، وأعدها أرقاماً عند القراءة بـ int:
scores = [90, 75, 88]
with open("scores.txt", "w", encoding="utf-8") as file: for score in scores: file.write(str(score) + "\n")
total = 0with open("scores.txt", encoding="utf-8") as file: for line in file: total += int(line)
print("المجموع:", total)المجموع: 253جرّب بنفسك
Section titled “جرّب بنفسك”اكتب برنامج «دفتر يوميات»: يطلب من المستخدم جملة بـ input، ويضيفها في آخر ملف diary.txt، ثم يعرض كل ما في الملف مع رقم كل سطر. شغّله ثلاث مرات، وستجد أن الجمل القديمة ما زالت محفوظة:
ماذا حدث اليوم؟ تعلمت الملفات1. ذهبت إلى المدرسة2. لعبت كرة القدم3. تعلمت الملفاتأخطاء شائعة
Section titled “أخطاء شائعة”- استخدام
"w"وأنت تقصد الإضافة: ستفقد كل المحتوى القديم دون أي تحذير. استخدم"a"للإضافة. - نسيان
encoding="utf-8": على ويندوز قد تظهر الحروف العربية رموزاً غريبة، أو يتوقف البرنامج بخطأUnicodeEncodeError. اكتب الترميز دائماً. - نسيان
\nعند الكتابة: ستلتصق كل الجمل في سطر واحد طويل. - كتابة رقم مباشرة:
file.write(90)تسببTypeError. حوّله أولاً بـstr(90).
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ماذا يحدث عند فتح ملف موجود بالوضع 'w'؟
الوضع w يبدأ الملف من الصفر. للإضافة دون مسح استخدم الوضع a.
سؤال
ما فائدة with عند فتح الملفات؟
with تضمن إغلاق الملف حتى لو حدث خطأ، فلا تحتاج إلى close().
الخلاصة
Section titled “الخلاصة”open(اسم, وضع, encoding="utf-8")تفتح الملف، وwithتغلقه تلقائياً."w"تكتب من الصفر، و"a"تضيف في الآخر، و"r"تقرأ.read()تعيد الملف كله، وحلقةforتمر على سطوره، وreadlines()تعيدها قائمة.- الملف يخزّن نصوصاً، فحوّل الأرقام بـ
strوint. - التقط
FileNotFoundErrorعند قراءة ملف قد لا يكون موجوداً.