التعامل مع الملفات بطريقة آمنة
عند التعامل مع الملفات قد تواجهك عدة مشاكل قد يكون سببها نظام التشغيل أو المستخدم.
لذلك عليك دائماً حماية الكود الذي من خلاله ستتعامل مع الملفات بالجمل try.. except
التي شرحناها سابقاً.
بعض المشاكل التي قد تحدث معك أثناء التعامل مع الملفات:
إذا كان مسار الملف الذي تريد التعامل معه مذكور بشكل غير صحيح.
إذا كنت تحاول قراءة محتوى ملف غير موجود أصلاً أو تم مسحه.
إذا كنت تريد الكتابة بالعربية و لم تحدد أن نوع الترميز الذي يجب أن يستخدم هو
'utf-8'
.إذا كنت تحاول التعامل مع صورة أو فيديو و لم تحدد أن نوع هذا الملف هو Binary كما شرحنا قبل قليل.
إذا كان الملف عليه صلاحية القراءة فقط ( Read Only ) لا يمكنك تعديل النص الموجود فيه بأي شكل أو مسح الملف نفسه من الحاسوب.
في حال كنت تريد إنشاء مجلد أو ملف و لم تكن تملك الصلاحيات التي تخولك لذلك. فمثلاً في نظام ويندوز لا تستطيع إنشاء ملف على المسار C:\ إذا لم تكن تملك صلاحيات مدير النظام.
في المثال التالي سنقوم بفتح الملف و التعامل معه بداخل بلوك try.. except
لضمان أن لا تحدث أي مشكلة تؤدي إلى تعليق البرنامج و لعرض أي خطأ قد يحدث أيضاً.
المثال الأول
# من أجل عرض النص الموجود فيه 'harmash.txt' هنا حاولنا إيجاد و فتح ملف إسمه try: opened_file = open('harmash.txt', 'r') print(opened_file.read()) opened_file.close() # و من ثم عرضها كنص عادي ex بما أنه لا يوجد هكذا ملف في المشروع, سيتم تخزين معلومات الخطأ الذي حدث في الكائن except Exception as ex: print(ex) print('Program still work properly')
•بعد تشغيل الملف Test.py
سيتم طباعة المشكلة التي حدثت أثناء محاولة القراءة من الملف كنص عادي و لن يؤدي ذلك إلى تعليق البرنامج.
Program still work properly
هنا قمنا بإعادة المثال السابق تماماً لكننا حاولنا فتح الملف بوسطة البلوك with
.
لاحظ أن النتيجة هي نفسها في الحالتين.
المثال الثاني
# من أجل عرض النص الموجود فيه 'harmash.txt' هنا حاولنا إيجاد و فتح ملف إسمه try: with open('harmash.txt', 'r') as opened_file: print(opened_file.read()) # و من ثم عرضها كنص عادي ex بما أنه لا يوجد هكذا ملف في المشروع, سيتم تخزين معلومات الخطأ الذي حدث في الكائن except Exception as ex: print(ex) print('Program still work properly')
•بعد تشغيل الملف Test.py
سيتم طباعة المشكلة التي حدثت أثناء محاولة القراءة من الملف كنص عادي و لن يؤدي ذلك إلى تعليق البرنامج.
Program still work properly