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

نشرت: 2022-03-11

في أي لغة برمجة ، تعتبر معالجة الملفات جانبًا مهمًا. كما تدعم Python العمل مع الملفات في أوضاع مختلفة - مثل القراءة والكتابة إلى الملفات والمزيد.

بنهاية هذا البرنامج التعليمي ، ستكون قادرًا على:

  • فتح وقراءة الملفات في بايثون ،
  • قراءة سطور من ملف نصي ،
  • الكتابة وإلحاق الملفات ، و
  • استخدام مديري السياق للعمل مع الملفات في بايثون.

كيف تقرأ الملف في بايثون

لفتح ملف في Python ، يمكنك استخدام الصيغة العامة: open('file_name','mode') .

  • هنا ، file_name هو اسم الملف.

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

  • يحدد mode المعلمة الوضع الذي تريد فتح الملف فيه.

تتم قراءة الوضع الافتراضي لفتح الملف — يُشار إليه بالحرف 'r' . ومع ذلك ، فمن المستحسن تحديد الوضع بشكل صريح.

قبل أن نبدأ ، دعنا نلقي نظرة على الملف lib.txt ، والذي سنستخدمه في هذا المثال.

قم بتنزيل الملف النصي والرمز المستخدم في هذا البرنامج التعليمي من GitHub repo.

يوضح مقتطف الشفرة أدناه كيف يمكنك فتح ملف نصي 'lib.txt' في Python باستخدام دالة open() وقراءة محتوياته.

 file = open('lib.txt','r') contents = file.read() print(contents) file.close() # Output Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels

في المثال أعلاه ،

  • ترجع الدالة open() كائن ملف ، ونختار تسميته باسم file .
  • بعد ذلك ، نسمي طريقة read() في file .
  • تحتوي contents المتغير الآن على محتوى الملف. ونطبعها.
  • أخيرًا ، نغلق الملف.

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

الآن ، دعنا نتعلم طريقة أفضل لفتح الملفات باستخدام مديري السياق. يوضح مقتطف الشفرة أدناه كيف يمكنك استخدامها.

 with open('lib.txt','r') as f: contents = f.read() print(contents)

عند استخدام مديري جهات الاتصال للعمل مع الملفات ، لا يتعين عليك استخدام طريقة close() . يتم إغلاق الملفات تلقائيًا بعد اكتمال عملية الإدخال / الإخراج.

كيف تقرأ سطور من ملف في بايثون

في ملفنا النصي النموذجي ، كان لدينا بضعة أسطر فقط. لذا فإن قراءة جميع محتويات الملف دفعة واحدة لم تكن مشكلة.

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

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

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

استخدام طريقة readline () بيثون لقراءة الأسطر من الملف

تقرأ طريقة readline() سطرًا واحدًا في كل مرة ، من الملف.

قم بتشغيل مقتطف التعليمات البرمجية التالي.

 with open('lib.txt','r') as f: line = f.readline() print(line) line = f.readline() print(line) # Output Hello, there! Here are a few helpful Python libraries:

يمكنك أن ترى أنه بعد استدعاء طريقة readline() الأول ، تتم طباعة السطر الأول في الملف. والاستدعاء الثاني للطريقة readline() يعيد السطر الثاني في الملف.

هذا لأنه بعد استدعاء الأسلوب الأول ، يكون مؤشر الملف في بداية السطر الثاني.

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

في مقتطف الشفرة أدناه ، نستخدم f.seek(0) بعد استدعاء الأسلوب الأول. يؤدي ذلك إلى تحريك مؤشر الملف إلى بداية الملف النصي. هذا هو السبب في طباعة السطر الأول في الملف في المرتين.

 with open('lib.txt','r') as f: line = f.readline() print(line) f.seek(0) line = f.readline() print(line) # Output Hello, there! Hello, there!

استخدام طريقة قراءة الخطوط بيثون () لقراءة الأسطر من الملف

هناك طريقة أخرى وثيقة الصلة تسمى readlines() .

عند تشغيل مقتطف الشفرة التالي ، سترى أن طريقة readlines() تُرجع قائمة بجميع الأسطر الموجودة في الملف.

 with open('lib.txt','r') as f: lines = f.readlines() print(lines) # Output ['Hello, there!\n', 'Here are a few helpful Python libraries:\n', '1) NumPy\n', '2) pandas\n', '3) matplotlib\n', '4) seaborn\n', '5) scikit-learn\n', '6) BeautifulSoup\n', '7) Scrapy\n', '8) nltk\n', '9) Bokeh\n', '10) statsmodels\n', '\n']

استخدام Python for Loop لقراءة الأسطر من ملف

لقراءة الأسطر من ملف نصي ، يمكنك أيضًا استخدام حلقة for .

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

 with open('lib.txt','r') as f: for line in f: print(line, end='')

ملاحظة : عند استخدام وظيفة print() بايثون ، يكون الفاصل الافتراضي هو سطر جديد - حرف '\n' . لكن في الملف الأصلي ، ليس لدينا هذه السطور الجديدة. لذا اضبط وسيطة الفاصل على سلسلة فارغة: end = '' لطباعة محتويات الملف كما هي.

كيف تقرأ أجزاء من المحتوى من ملف في بايثون

في Python ، يمكنك أيضًا اختيار قراءة محتويات الملف من حيث الأجزاء الصغيرة.

اقرأ الكود أدناه:

  • هنا ، قمنا بتعيين chunk_size على 50 . هذا يعني أنه ستتم قراءة أول 50 حرفًا في الملف ، وسنطبعها أيضًا.
  • الآن ، قم باستدعاء التابع tell() على كائن الملف f . يمكنك أن ترى أن مؤشر الملف الآن في الموضع 51— وهو ما هو متوقع.
 chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk) current = f.tell() print(f"Current position of file pointer: {current}") # Output Hello, there! Here are a few helpful Python librar Current position of file pointer: 51

يمكنك أيضًا استخدام هذه التقنية لقراءة الملف بأكمله من حيث الأجزاء الصغيرة.

يوضح مقتطف الشفرة التالي كيف يمكنك القيام بذلك.

 chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk,end='') while(len(chunk)>0): chunk = f.read(chunk_size) print(chunk,end='') # Output Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels

هنا ، نستخدم حلقة while لقراءة محتويات الملف. نقرأ في محتويات الملف أجزاء بحجم 50 حتى نصل إلى نهاية الملف.

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

من أجل الكتابة إلى ملف نصي في Python ، يجب أن تفتحه في وضع الكتابة - مع تحديد 'w' .

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

يوضح مقتطف الشفرة أدناه كيفية القيام بذلك.

 with open('new_file.txt','w') as f: f.write('Hello, Python!')

ستلاحظ أنه تم إنشاء 'new_file.txt' في دليل العمل الخاص بك.

الآن ، قم بتشغيل خلية الكود أعلاه مرة أخرى.

في جهازك الطرفي ، قم بتشغيل الأمر التالي:

 cat new_file.txt # Output: Hello, Python!

من الناحية المثالية ، كتبنا إلى الملف مرتين. Hello, Python! كان يجب طباعته مرتين ، نعم؟

لكن سترى أنه تمت طباعته مرة واحدة فقط. حسنًا ، هذا لأنه عندما تفتح ملفًا في وضع الكتابة ( w ) ، فإنك تقوم بشكل أساسي بالكتابة فوق محتويات الملف بمحتوى جديد.

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

كيفية إلحاق ملف في بايثون

إذا كنت ترغب في إلحاق محتوى بملف - بدون الكتابة فوقه ، فافتحه في وضع الإلحاق .

للقيام بذلك ، استخدم 'a' - a للإلحاق - وحدد الوضع بشكل صريح.

بعد ذلك ، قم بتشغيل خلية التعليمات البرمجية التالية مرتين.

 with open('new_file.txt','a') as f: f.write('Hello, Python!')

لاحظ كيف تمت طباعة النص مرتين الآن ، حيث قمنا بإلحاق الملف بالملف.

 cat new_file.txt # Output: Hello, Python!Hello, Python!

استنتاج

دعنا نلخص بسرعة ما مررنا به في هذا البرنامج التعليمي.

  • لقد تعلمت عمليات الإدخال / الإخراج الشائعة للملف مثل القراءة والكتابة والإلحاق بالملف.
  • بالإضافة إلى ذلك ، تعلمت أيضًا كيفية استخدام طريقة () () البحث لتحريك مؤشر الملف إلى موضع معين ، و
  • كيفية استخدام التابع tell () لاسترداد الموضع الحالي لمؤشر الملف.

أتمنى أن تكون قد وجدت هذا البرنامج التعليمي مفيدًا. الآن بعد أن تعلمت كيفية العمل مع الملفات النصية في Python ، تعرف على كيفية العمل مع ملفات JSON في Python.

متعلق ب:

تحقق من طول القائمة في Python في 3 خطوات.