إعلان
دورة تطوير التطبيقات باستخدام لغة JavaScript في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp. تعلم الآن
دورة تطوير واجهات المستخدم في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية. تعلم الآن
تطوير تطبيقات باستخدام لغة بايثون في هذه الدورة ستتعلم أساسيات البرمجة بلغة بايثون وصولاً إلى التعامل مع أشهر أطر العمل (Flask و Django) و ستتعلم كيف تبني متجر إلكتروني يمكن للمستخدمين البيع و الشراء من خلاله. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة PHP في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة Ruby في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O. تعلم الآن
دورة علوم الحاسوب هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب. تعلم الآن

    بايثون التعامل مع الملفات

    معالجة الملفات

    التعامل مع الملفات أو معالجة الملفات ( Files Handling ) يقصد منها إجراء عملية ما على الملفات على مختلف انواعها ( مثل txt - jpg - mp4 ).
    في هذا الدرس ستتعلم كيف تقرأ محتوى ملف, كيف تنشئ نسخة منه, كيف تعدل محتواه, كيف تحذفه إلخ..

    الدالة open()

    هذه الدالة هي من الدوال الجاهزة في بايثون و هي تستخدم لإنشاء ملف جديد أو لفتح الملف الذي سيتم التعامل معه.
    في حال تم إنشاء الملف بشكل صحيح أو تم فتح الملف بشكل صحيح ترجع كائن file يتيح لك التعامل معه.
    في حال لم تستطع إنشاء الملف أو الوصول إليه ترمي إستثناء.


    بناؤها

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None)
    	

    • مكان البارميتر file نمرر نص يمثل إسم الملف الذي سيتم إنشاؤه أو التعامل معه.
    • mode هو باراميتر إختياري, نمرر مكانه حرف ( أو أكثر ) يمثل كيف سنتعامل مع الملف, مثل: هل تنوي القراءة منه أو الكتابة فيها إلخ..
    • buffering هو باراميتر إختياري, يمكنك أن تمرر مكانه رقم يحدد كيف سيتم تخزين الأحرف بشكل مؤقت في الذاكرة أثناء الكتابة أو القراءة من الملف.
    • encoding هو باراميتر إختياري, يمكنك أن تمرر مكانه إسم الترميز الذي يجب استخدامه عند التعامل مع الملف.
    • errors هو باراميتر إختياري, يمكنك أن تمرر مكانه كلمة لتحدد كيف سيتم التعامل مع الأخطاء التي قد تحدث عند التعامل مع الملف.
    • newline هو باراميتر إختياري, يمكنك أن تمرر مكانه الرمز الذي يمثل نهاية كل سطر في الملف و الذي يجعل النص الذي يوضع بعضه ينزل على سطر جديد.


    أهم باراميتر إختياري في هذه الدالة هو الباراميتر mode لأنه كما سبق و قلنا أن الحرف الذي نمرره مكانه يحدد الهدف من فتح الملف.
    في الجدول التالي وضعنا كل الحروف التي يمكن تمريرها مكان هذا الباراميتر.

    الحرف معناه مثال
    'r' يعتبر إختصار للكلمة Read, و هو يستخدم لفتح الملف من أجل القراءة منه.
    كما أنه الـ Mode الإفتراضي للملف الذي تفتحه.
    شاهد المثال »
    'w' يعتبر إختصار للكلمة Write, و هو يستخدم لفتح الملف من أجل الكتابة فيه.
    و في حال لم يكن الملف المراد الكتابة فيه موجوداً أصلاً, سيتم إنشاؤه.
    ملاحظة: هذا الحرف يقوم بحذف النص الذي كان موجوداً في الملف في حال لم يكن فارغاَ.
    شاهد المثال »
    'a' يعتبر إختصار للكلمة Append, و هو يستخدم لفتح الملف من أجل الكتابة في آخره. أي لإضافة نص جديد على النص الموجود في الملف.
    و في حال لم يكن الملف المراد الكتابة فيه موجوداً أصلاً, سيتم إنشاؤه.
    شاهد المثال »
    'x' يعتبر إختصار للكلمة Create, و هو يستخدم لإنشاء ملف جديد فقط في حال لم يكن موجوداً. شاهد المثال »
    't' يعتبر إختصار للكلمة Text, و هو يستخدم لتحديد أن محتوى الملف عبارة عن نص عادي.
    كما أنه الـ Mode الإفتراضي للملف الذي تفتحه.
    شاهد المثال »
    'b' يعتبر إختصار للكلمة Binary, و هو يستخدم لتحديد أن محتوى الملف عبارة عن Binary, أي أحرف لا يمكن أن يفهمها الإنسان العادي.
    هذا الـ Mode نستخدمه عند التعامل مع الملفات الغير نصية مثل الصور, الفيدوهات, التسجيلات الصوتية إلخ..
    ملاحظة: المثال سيعلمك طريقة إنشاء نسخة من أي ملف.
    شاهد المثال »
    '+' يعتبر إختصار للكلمتين Read & Write, و هو يستخدم لفتح الملف مع إمكانية القراءة منه و الكتابة فيه في نفس الوقت. شاهد المثال »

    ملاحظة

    الأحرف المذكورة في الجدول يمكن دمجها مع بعضها, أي يمكنك تحديد أكثر من Mode في وقت واحد.
    فمثلاً يمكنك كتابة 'wb' من أجل فتح ملف جديد و وضع فيه نص نوعه Binary كما نفعل في حال أردنا نسخ صورة على سبيل المثال.


    في المثال التالي قمنا بإنشاء ملف نصي جديد إسمه demo.txt في نفس المشروع الذي نعمل فيه.
    بعدها قمنا كتابة السطر التالي بداخله Python is an easy language to learn..

    مثال

    Test.py
    # لكي يتم إنشاء الملف و لنستطيع الكتابة فيه أيضاً 'w' و وضعنا الرمز 'demo.txt' هنا قمنا بإنشاء كائن يشير لملف إسمه
    opened_file = open('demo.txt', 'w')
    
    # للكتابة في الملف الذي يشير إليه opened_file من الكائن write() هنا قمنا باستدعاء الدالة
    opened_file.write('Python is an easy language to learn.')
    
    # لإغلاق الإتصال مع الملف المفتوح في الذاكرة opened_file من الكائن close() هنا قمنا باستدعاء الدالة
    opened_file.close()
    		

    بعد تشغيل الملف Test.py سيتم إنشاء ملف إسمه demo.txt في نفس المشروع الذي نعمل فيه و بداخله النص التالي.

    Python is an easy language to learn.

    دوال القراءة و الكتابة في الملفات

    بعد فتح الملف الذي تريد التعامل معه بنجاح بواسطة الدالة open() يصبح بإمكانك استخدام الدوال التالية من الكائن الذي سترجعه هذه الدالة.

    إسم الدالة مع تعريفها
    write(string) تستخدم للكتابة في الكائن الذي يمثل الملف المفتوح الذي قام باستدعائها.
    مكان الباراميتر string نمرر النص الذي نريد أن يتم كتابته في الملف.
    شاهد المثال »
    writelines(aList) تستخدم لكتابة مجموعة نصوص مخزنة في list في الكائن الذي يمثل الملف المفتوح الذي قام باستدعائها.
    مكان الباراميتر lines نمرر كائن aList فيه مجموعة النصوص التي نريد أن يتم كتابتها بنفس الترتيب في الملف.
    شاهد المثال »
    read(n = -1) تستخدم للقراءة من الكائن الذي يمثل الملف المفتوح الذي قام باستدعائها.
    إذا قمت باستدعائها و لم تمرر لها أي رقم, سترجع كل النص الموجود في الملف دفعة واحد.
    n هو باراميتر إختياري يمكنك أن تمرر مكانه رقم يمثل عدد الأحرف التي تريد قراءتها من الملف في حال لم ترد أن تقرأ كل محتوى الملف دفعة واحدة. مع الإشارة إلى أنك في كل مرة تقوم فيها باستدعائها ستعطيك الأحرف التالية الموجودة في الملف.
    شاهد المثال »
    readline(limits = -1) تستخدم للقراءة سطراً سطراً من الكائن الذي يمثل الملف المفتوح الذي قام باستدعائها.
    إذا قمت باستدعائها و لم تمرر لها أي رقم, سترجع السطر التالي الموجود في الملف.
    n هو باراميتر إختياري يمكنك أن تمرر مكانه رقم يمثل عدد الأحرف التي تريد قراءتها من السطر التالي في الملف في حال لم ترد أن تقرأ كل محتوى السطر دفعة واحدة. مع الإشارة إلى أنك في كل مرة تقوم فيها باستدعائها ستعطيك الأحرف الموجودة حتى نهاية السطر الحالي في الملف.
    شاهد المثال »
    readlines(limits = -1) تستخدم لإرجاع نسخة من النص الموجود في الكائن الذي يمثل الملف المفتوح الذي قام باستدعائها ككائن list.
    كل عنصر في كائن الـ list الذي ترجعه يمثل سطر موجود في الملف.
    إذا قمت باستدعائها و لم تمرر لها أي رقم, سيتم وضع كل الأحرف الموجودة على كل سطر في الملف في عنصر من عناصر الكائن الـ list.
    n هو باراميتر إختياري يمكنك أن تمرر مكانه رقم يمثل عدد الأحرف التي تريد قراءتها من كل سطر في الملف في حال لم ترد أن تقرأ كل محتوى السطر.
    شاهد المثال »
    tell() ترجع رقم آخر حرف في الملف تم الوصول إليه أثناء القراءة من الملف عن طريق الكائن الذي يمثل هذا الملف.
    شاهد المثال »
    seek(offset, from_what=0) أثناء القراءة من الملف عن طريق الكائن الذي يمثل هذا الملف, يمكنك إستخدام هذه الدالة في حال أردت الرجوع إلى الوراء في الملف لقراءة الملف من جديد على سبيل المثال.
    from_what هو باراميتر إختياري يمكنك أن تمرر إحدى الأرقام التالية مكانه:
    • الرقم 0 إذا أردت الرجوع إلى أول حرف في الملف.
    • الرقم 1 إذا أردت البقاء عند حرف الحالي الذي وصلت إليه في الملف.
    • الرقم 2 إذا أردت الذهاب إلى آخر حرف في الملف.
    مكان الباراميتر offset تمرر رقم يمثل بعد كم حرف نسبة للبراميتر from_what تريد أن تبدأ.
    مثال: إذا قمت باستدعاء الدالة هكذا seek(0,0) أو هكذا seek(0) فهذا يعني أنك تريد العودة إلى أول حرف في الملف.
    شاهد المثال »
    close() تستخدم لإغلاق الإتصال مع الملف و تنظيف الذاكرة من كل ما له علاقة بهذا الملف.
    ملاحظة: في حال قمت بفتح الملف بالأساس بواسطة الجملة with فلا داعي لإغلاق الملف لأنها تقوم بإغلاقه بشكل تلقائي عنك.
    شاهد المثال »

    خصائص الملفات

    بالإضافة إلى الدوال السابقة, يصبح بإمكانك الإستفادة من الخصائص التالية من الكائن الذي ترجعه الدالة open().

    إسم الخاصية مع تعريفها
    name ترجع إسم الملف الذي يمثله الكائن.
    mode ترجع الحرف أو الأحرف المستخدمة لتحديد الهدف من فتح الملف.
    encoding ترجع إسم الترميز المستخدم في الملف الذي يمثله الكائن.
    closed تستخدم لمعرفة ما إذا كان الكائن الذي يمثل الملف لا يزال مفتوح أم تم إغلاقه.
    ترجع True إن كان كذلك, إن لم يكن كذلك ترجع False.


    في المثال التالي قمنا بإنشاء كائن يشير للملف demo.txt الذي أنشأناه سابقاً.
    بعدها قمنا بعرض خصائص هذا الكائن و التي بدورها تعتبر خصائص الملف نفسه.

    مثال

    Test.py
    # 'demo.txt' هنا قمنا بإنشاء كائن يشير لملف إسمه
    opened_file = open('demo.txt')
    
    # الذي يشير للملف المفتوح في الذاكرة opened_file هنا قمنا بعرض كل خصائص الكائن
    print('File Name:', opened_file.name)
    print('Access Mode:', opened_file.mode)
    print('Encoding Type:', opened_file.encoding)
    print('Is File closed:', opened_file.closed)
    
    # لإغلاق الإتصال مع الملف المفتوح في الذاكرة opened_file من الكائن close() هنا قمنا باستدعاء الدالة
    opened_file.close()
    		

    سنحصل على النتيجة التالية عند تشغيل الملف Test.py.

    File Name: demo.txt
    Access Mode: w
    Encoding Type: cp1252
    Is File closed: False

    الموديول os

    os هو موديول جاهز في بايثون يتيح لك إعادة تسمية الملفات, مسح الملفات, إنشاء مجلدات, مسح مجلدات, التنقل بين المجلدات إلخ..

    لإستخدام هذا الموديول يجب تضمينه كالتالي.

    import os
    	


    الجدول التالي يحتوي على دوال الموديول os الأكثر استخداماً.

    إسم الدالة مع تعريفها
    os.rename(current_file_name, new_file_name) تستخدم لتغيير إسم الملف.
    مكان الباراميتر current_file_name نمرر إسم الملف الذي نريد تغيير إسمه.
    مكان الباراميتر new_file_name نمرر الإسم الجديد الذي نريد وضعه للملف.
    شاهد المثال »
    os.remove(file_name) تستخدم لمسح الملف.
    مكان الباراميتر file_name نمرر إسم الملف الذي نريد حذفه.
    شاهد المثال »
    os.path.exists(file_name) تستخدم لمعرفة ما إن كان الملف موجوداً أم لا.
    مكان الباراميتر file_name نمرر إسم الملف الذي نريد التأكد ما إن كان موجوداً أم لا.
    ترجع True إذا كان الملف موجوداً. و ترجع False إن لم يكن كذلك.
    شاهد المثال »
    os.mkdir(directory_name) تستخدم لإنشاء مجلد جديد.
    مكان الباراميتر directory_name نمرر إسم المجلد الذي نريد إنشاؤه.
    معلومة: إسم الدالة هو إختصار لجملة Make Directory.
    شاهد المثال »
    os.rmdir(directory_name) تستخدم لمسح المجلد.
    مكان الباراميتر directory_name نمرر إسم المجلد الذي نريد حذفه.
    ملاحظة: يمكنك حذف المجلد في حال كان فارغاً فقط, أي في حال لم يكن يحتوي على أي ملف بداخله.
    معلومة: إسم الدالة هو إختصار لجملة Remove Directory.
    شاهد المثال »
    os.getcwd() تستخدم لمعرفة إسم المجلد الذي تقف بداخله حالياً.
    معلومة: إسم الدالة هو إختصار لجملة Get Current Working Directory.
    شاهد المثال »

    البلوك with

    يمكنك الإستفادة من إستخدام أسلوب البلوك with في حال أردت أن يتم إغلاق الملفات التي تفتحها في برامجك بشكل تلقائي و بدون الحاجة لإستدعاء الدالة close().


    طريقة تعريف البلوك with:

    with expression [as variable]:
        #with-block
    	

    • expression: نضع مكانه الأمر الذي سيرجع لنا كائن يشير الملف الذي تم فتحه في الذاكرة.
    • variable: نضع مكانه إسم الكائن الذي نريد من خلاله أن نتعامل مع الملف الذي تم فتحه في الذاكرة.
    • #with-block: مكان هذا التعليق نضع الأوامر التي نريد تنفيذها بعد أن تم فتح الملف بنجاح.


    في المثال التالي قمنا بفتح ملف و قراءة النص الموجود فيه بدون الحاجة لإغلاقه عند الإنتهاء منه لأننا وضعنا الكود بداخل بلوك الكلمة with.

    مثال

    Test.py
    # بعدها قمنا بطباعة النص الموجود فيه 'demo.txt' يشير للملف opened_file هنا قمنا بإنشاء كائن إسمه
    with open('demo.txt', 'r') as opened_file:
    	print(opened_file.read())
    
    # هنا قمنا بطباعة ما إن كان الملف لا يزال مفتوحاً في الذاكرة أم أنه تم إغلاقه
    print('Is File Closed:', opened_file.closed)
    		

    بعد تشغيل الملف Test.py سيتم طباعة كل النص الموجود في الملف demo.txt الذي إفترضنا أننا أنشأناه سابقاً في نفس المشروع الذي نعمل فيه.

    نلاحظ أن الدالة closed() أرجعت القيمة True و هذا يعني أنه تم إغلاق الملف من الذاكرة بشكل تلقائي عند إنتهاء البلوك with.

    Python is an easy language to learn.
    Is File Closed: True

    تخزين أحرف عربية في الملف

    إذا حاولت كتابة أحرف عربية في ملف و لم تحدد أن نوع الترميز المستخدم عند التعامل مع الملف هو utf-8 سيظهر أمامك الخطأ 'charmap' codec can't encode.
    و إذا حاولت قراءة نص عربي موجود في ملف و لم تحدد نوع الترميز ستلاحظ أن النص يظهر بشكل غير مفهوم كالتالي السلام عليكم.


    في المثال التالي قمنا بإنشاء ملف إسمه arabic.txt قمنا بتخزين نص عربي فيه و بعدها قمنا بقراءة النص الموجود فيه.

    مثال

    Test.py
    # 'Test.py' سيتم إنشاؤه في نفس المشروع بجانب الملف 'arabic.txt' يشير لملف جديد إسمه opened_file هنا قمنا بإنشاء كائن إسمه
    # لنستطيع التعامل مع الأحرف العربية 'utf-8' حتى يتم إنشاء الملف و يكون لدينا القدرة على الكتابة و القراءة منه في نفس الوقت. كما أننا حددنا نوع الترميز هو 'w+' وضعنا الرمز
    opened_file = open('arabic.txt', 'w+', encoding='utf-8')
    
    # لكتابة نص جديد في الملف الذي يشير إليه و لاحظ أننا أدخلنا نص عربي  opened_file من الكائن write() هنا قمنا باستدعاء الدالة
    opened_file.write('السلام عليكم و رحمة الله و بركاته')
    
    # للعودة لأول الملف seek() هنا قمنا باستدعاء الدالة
    opened_file.seek(0,0)
    
    # الذي يشير للملف المفتوح حتى ترجع كل النص الموجود فيه, بعدها قمنا بطباعة النص الذي سترجعه opened_file من الكائن read() هنا قمنا باستدعاء الدالة
    print(opened_file.read())
    
    # لإغلاق الإتصال مع الملف المفتوح في الذاكرة opened_file من الكائن close() هنا قمنا باستدعاء الدالة
    opened_file.close()
    		

    بعد تشغيل الملف Test.py سيتم إنشاء الملف arabic.txt و تخزين النص العربي بداخله. أيضاً سيتم طباعة النص العربي الموجود في الأساس بداخل الملف كالتالي.

    السلام عليكم و رحمة الله و بركاته

    التعامل مع الملفات بطريقة آمنة

    عند التعامل مع الملفات قد تواجهك عدة مشاكل قد يكون سببها نظام التشغيل أو المستخدم.
    لذلك عليك دائماً حماية الكود الذي من خلاله ستتعامل مع الملفات بالجمل try.. except التي شرحناها سابقاً.


    بعض المشاكل التي قد تحدث معك أثناء التعامل مع الملفات:

    • إذا كان مسار الملف الذي تريد التعامل معه مذكور بشكل غير صحيح.
    • إذا كنت تحاول قراءة محتوى ملف غير موجود أصلاً أو تم مسحه.
    • إذا كنت تريد الكتابة بالعربية و لم تحدد أن نوع الترميز الذي يجب أن يستخدم هو 'utf-8'.
    • إذا كنت تحاول التعامل مع صورة أو فيديو و لم تحدد أن نوع هذا الملف هو Binary كما شرحنا قبل قليل.
    • إذا كان الملف عليه صلاحية القراءة فقط ( Read Only ) لا يمكنك تعديل النص الموجود فيه بأي شكل أو مسح الملف نفسه من الحاسوب.
    • في حال كنت تريد إنشاء مجلد أو ملف و لم تكن تملك الصلاحيات التي تخولك لذلك. فمثلاً في نظام ويندوز لا تستطيع إنشاء ملف على المسار C:\ إذا لم تكن تملك صلاحيات مدير النظام.

    في المثال التالي سنقوم بفتح الملف و التعامل معه بداخل بلوك try.. except لضمان أن لا تحدث أي مشكلة تؤدي إلى تعليق البرنامج و لعرض أي خطأ قد يحدث أيضاً.

    المثال الأول

    Test.py
    # من أجل عرض النص الموجود فيه '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 سيتم طباعة المشكلة التي حدثت أثناء محاولة القراءة من الملف كنص عادي و لن يؤدي ذلك إلى تعليق البرنامج.

    [Errno 2] No such file or directory: 'harmash.txt'
    Program still work properly


    هنا قمنا بإعادة المثال السابق تماماً لكننا حاولنا فتح الملف بوسطة البلوك with.
    لاحظ أن النتيجة هي نفسها في الحالتين.

    المثال الثاني

    Test.py
    # من أجل عرض النص الموجود فيه '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 سيتم طباعة المشكلة التي حدثت أثناء محاولة القراءة من الملف كنص عادي و لن يؤدي ذلك إلى تعليق البرنامج.

    [Errno 2] No such file or directory: 'harmash.txt'
    Program still work properly
    إعلان

    Eqla3Tech.com

    شروحات مكتوبة حول لغات البرمجة و تقنية المعلومات باللغة العربية مقدمة من إقلاع تك.

    لغة جافا لغة ++C قواعد البيانات نظام ويندوز نظام لينكس الشبكات تقنية المعلومات الأمن السيبراني

    الدورات

    أدوات مساعدة

    الأقسام

    دورات
    مقالات أسئلة مشاريع كتب