القائمة الرئيسية

الصفحات

دورة البرمجة بلغة بايثون - الدرس التاسع والعشرون (قراءة وكتابة الملفات)

دورة البرمجة بلغة بايثون - الدرس التاسع والعشرون (قراءة وكتابة الملفات في بايثون)

دورة البرمجة بلغة بايثون - الدرس التاسع والعشرون (قراءة وكتابة الملفات)

في هذا الدرس ، ستتعرف على عمليات الملفات في بايثون. وبشكل أكثر تحديدًا ، فتح ملف ، والقراءة منه ، والكتابة فيه ، وإغلاقه ، وطرق الملفات المختلفة التي يجب أن تكون على دراية بها.


الملفات

يتم تسمية الملفات بمواقع على القرص لتخزين المعلومات ذات الصلة. يتم استخدامها لتخزين البيانات بشكل دائم في الذاكرة (مثل القرص الصلب).


نظرًا لأن ذاكرة الوصول العشوائي (RAM) متقلبة (تفقد بياناتها عند إيقاف تشغيل الكمبيوتر) ، فإننا نستخدم الملفات للاستخدام المستقبلي للبيانات عن طريق تخزينها بشكل دائم.


عندما نريد القراءة من ملف أو الكتابة إليه ، نحتاج إلى فتحه أولاً. عندما ننتهي ، يجب إغلاقه حتى يتم تحرير الموارد المرتبطة بالملف.


ومن ثم ، في بايثون ، تتم عملية الملف بالترتيب التالي:

  • فتح ملف
  • قراءة أو كتابة (إجراء العملية)
  • أغلق الملف

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

تحتوي لغة بايثون على دالة ()open مضمنة لفتح ملف. تقوم هذه الدالة بإرجاع كائن ملف ، يسمى أيضًا المقبض ، حيث يتم استخدامه لقراءة الملف أو تعديله وفقًا لذلك.

>>> f = open("test.txt")    # open file in current directory
>>> f = open("C:/Python38/README.txt")  # specifying full path

يمكننا تحديد الوضع أثناء فتح الملف. في الوضع ، نحدد ما إذا كنا نريد قراءة r أو كتابة w أو اضافة a الى الملف. يمكننا أيضًا تحديد ما إذا كنا نريد فتح الملف في وضع النص أو الوضع الثنائي.


الإعداد الافتراضي هو القراءة في وضع النص. في هذا الوضع ، نحصل على سلاسل نصية عند القراءة من الملف.


من ناحية أخرى ، يقوم الوضع الثنائي بإرجاع البايت وهذا هو الوضع الذي يجب استخدامه عند التعامل مع الملفات غير النصية مثل الصور أو الملفات القابلة للتنفيذ.

دورة البرمجة بلغة بايثون - الدرس التاسع والعشرون (قراءة وكتابة الملفات)

f = open("test.txt")      # equivalent to 'r' or 'rt'
f = open("test.txt",'w')  # write in text mode
f = open("img.bmp",'r+b') # read and write in binary mode


بخلاف اللغات الأخرى ، لا يشير الحرف a إلى الرقم 97 حتى يتم ترميزه باستخدام ASCII (أو أي ترميزات أخرى مكافئة).


علاوة على ذلك ، يعتمد الترميز الافتراضي على النظام الأساسي. في ويندوز يكون الترميز cp1252 وفي لينكس الترميز utf-8.


لذلك ، يجب ألا نعتمد أيضًا على التشفير الافتراضي وإلا فإن الكود الخاص بنا سوف يكون بشكل مختلف في الأنظمة الأساسية المختلفة.


ومن ثم ، عند العمل مع الملفات في وضع النص ، يوصى وبشدة تحديد نوع الترميز عند فتح الملف.

f = open("test.txt", mode='r', encoding='utf-8')


إغلاق الملفات في بايثون

عندما ننتهي من إجراء العمليات على الملف ، نحتاج إلى إغلاق الملف بشكل صحيح.


سيؤدي إغلاق الملف إلى تحرير الموارد التي كانت مرتبطة بالملف. يتم ذلك باستخدام طريقة ()close المتوفرة في بايثون.


يوجد في بايثون أداة تجميع القمامة لتنظيف الكائنات غير المرجعية ولكن يجب ألا نعتمد عليها لإغلاق الملف.

f = open("test.txt", encoding = 'utf-8')
# perform file operations
f.close()


هذه الطريقة ليست آمنة تمامًا. إذا حدث اي خطأ عندما نجري بعض العمليات مع الملف ، فسيتم إنهاء الكود بدون إغلاق الملف.


الطريقة الأكثر أمانًا هي استخدام كتلة try ...

try:
   f = open("test.txt", encoding = 'utf-8')
   # perform file operations
finally:
   f.close()

بهذه الطريقة ، نضمن إغلاق الملف بشكل صحيح حتى إذا ظهر خطأ يتسبب في توقف تدفق البرنامج.


أفضل طريقة لإغلاق ملف هي استخدام تعليمة with. هذا يضمن أن الملف مغلق عند الخروج من الكتلة الموجودة داخل تعليمة with.


لا نحتاج إلى استدعاء دالة close بشكل صريح. يتم ذلك داخليا.

with open("test.txt", encoding = 'utf-8') as f:
   # perform file operations

الكتابة إلى الملفات في بايثون

من أجل الكتابة في ملف في لغة بايثون ، نحتاج إلى فتحه في طور الكتابة w ، أو طور الإلحاق a او وضع الإنشاء الخاص x.


نحتاج إلى توخي الحذر مع الوضع w ، حيث سيتم استبدال الملف إذا كان موجودًا بالفعل. نتيجة لهذا ، يتم مسح جميع البيانات السابقة.


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

with open("test.txt",'w',encoding = 'utf-8') as f:
   f.write("my first file\n")
   f.write("This file\n\n")
   f.write("contains three lines\n")

سيقوم هذا البرنامج بإنشاء ملف جديد باسم test.txt في الدليل الحالي إذا لم يكن موجودًا. إذا كان موجودًا ، فسيتم الكتابة فوقه.


يجب علينا تضمين أحرف السطر الجديد بأنفسنا لتمييز الأسطر المختلفة.


قراءة الملفات في بايثون

لقراءة ملف في بايثون ، يجب أن نفتح الملف في وضع القراءة r.


هناك طرق مختلفة متاحة لهذا الغرض. يمكننا استخدام طريقة (read(size لقراءة حجم عدد البيانات. إذا لم يتم تحديد معلمة الحجم ، فسيتم القراءة الى نهاية الملف.


يمكننا قراءة ملف text.txt الذي كتبناه في القسم أعلاه بالطريقة التالية:

>>> f = open("test.txt",'r',encoding = 'utf-8')
>>> f.read(4)    # read the first 4 data
'This'

>>> f.read(4)    # read the next 4 data
' is '

>>> f.read()     # read in the rest till end of file
'my first file\nThis file\ncontains three lines\n'

>>> f.read()  # further reading returns empty sting
''

يمكننا أن نرى أن طريقة ()read ترجع سطرًا جديدًا كـ "\ n". بمجرد الوصول إلى نهاية الملف ، نحصل على سلسلة فارغة من النصوص اذا استمرينا بالقراءة.


يمكننا تغيير مؤشر الملف الحالي (الموضع) باستخدام طريقة ()seek. وبالمثل ، فإن طريقة ()tell ترجع موقعنا الحالي (بعدد البايتات).

>>> f.tell()    # get the current file position
56

>>> f.seek(0)   # bring file cursor to initial position
0

>>> print(f.read())  # read the entire file
This is my first file
This file
contains three lines


يمكننا قراءة ملف سطرًا بسطر باستخدام حلقة for. هذه الطريقة فعالة وسريعة.

>>> for line in f:
...     print(line, end = '')
...
This is my first file
This file
contains three lines


في هذا البرنامج ، تشتمل الأسطر الموجودة في الملف نفسه على حرف سطر جديد \ n. لذلك ، نستخدم المعلمة النهائية لوظيفة ()print لتجنب سطرين جديدين عند الطباعة.


بدلاً من ذلك ، يمكننا استخدام طريقة ()readline لقراءة الأسطر الفردية من الملف. تقرأ هذه الطريقة ملفًا حتى السطر الجديد ، بما في ذلك حرف السطر الجديد.

>>> f.readline()
'This is my first file\n'

>>> f.readline()
'This file\n'

>>> f.readline()
'contains three lines\n'

>>> f.readline()
''


أخيرًا ، تقوم طريقة ()readlines بإرجاع قائمة بالأسطر المتبقية من الملف بأكمله. كل طرق القراءة هذه ترجع قيمًا فارغة عند الوصول إلى نهاية الملف (EOF).

>>> f.readlines()
['This is my first file\n', 'This file\n', 'contains three lines\n']


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

هناك العديد من الدوال المتاحة مع كائن الملف. تم استخدام بعضها في الأمثلة المذكورة أعلاه.


فيما يلي القائمة الكاملة للطرق في وضع النص مع وصف موجز:

MethodDescription
close()Closes the file
detach()Returns the separated raw stream from the buffer
fileno()Returns a number that represents the stream, from the operating system's perspective
flush()Flushes the internal buffer
isatty()Returns whether the file stream is interactive or not
read()Returns the file content
readable()Returns whether the file stream can be read or not
readline()Returns one line from the file
readlines()Returns a list of lines from the file
seek()Change the file position
seekable()Returns whether the file allows us to change the file position
tell()Returns the current file position
truncate()Resizes the file to a specified size
writable()Returns whether the file can be written to or not
write()Writes the specified string to the file
writelines()Writes a list of strings to the file
reaction:
Ahmed Taher
Ahmed Taher
مدون من العراق . احب البرمجة وكل ما يتعلق بالشبكات والسيرفرات وامن المعلومات . واسعى الى توفير جميع المصادر والمواد للامتحانات الدولية.

تعليقات