البرمجة

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

التعامل مع الملفات النصية في بايثون: دليل شامل وموسع

يُعد التعامل مع الملفات النصية أحد الأساسيات في أي لغة برمجة، ولا تختلف لغة بايثون عن غيرها في هذا المجال، بل إنها تقدّم واجهة غنية وسهلة للتعامل مع الملفات النصية بجميع أشكالها. تعتبر عمليات قراءة الملفات، وكتابتها، وتعديلها، وحذفها من أهم الوظائف التي يحتاج إليها أي مطوّر أو مبرمج عند العمل على أنظمة تعتمد على إدخال وإخراج البيانات (I/O). في هذا المقال، سيتم التوسّع بشكل علمي وعملي في جميع المفاهيم المتعلقة بالتعامل مع الملفات النصية باستخدام لغة بايثون، مع تقديم أمثلة عملية وتوضيحات تقنية مفصلة.


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

الملفات النصية هي ملفات تحتوي على بيانات غير منسقة بتنسيق ثنائي، حيث يتم تمثيل المحتوى كسلسلة من الأحرف. الملفات النصية غالباً ما تكون بامتداد .txt، ولكن يمكن أن تشمل أيضاً أنواعاً أخرى مثل .csv أو .log أو .json طالما يتم تمثيلها كنص قابل للقراءة.

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


فتح الملفات النصية: دالة open()

python
file = open("example.txt", "r")

الدالة open() تتطلب على الأقل وسيطين:

  • اسم الملف أو المسار الكامل.

  • نمط الفتح (mode) مثل:

    • "r": للقراءة.

    • "w": للكتابة (يمسح محتوى الملف أولاً).

    • "a": للإلحاق بنهاية الملف دون حذف المحتوى.

    • "x": لإنشاء ملف جديد فقط، ويعطي خطأ إذا كان الملف موجوداً.

    • "b": للملفات الثنائية (binary).

    • "t": للنصوص (الوضع الافتراضي).

    • "+": للقراءة والكتابة في نفس الوقت.


قراءة الملفات النصية

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

1. read(): قراءة كل محتوى الملف دفعة واحدة

python
with open("example.txt", "r") as file: content = file.read()

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

2. readline(): قراءة سطر واحد فقط

python
with open("example.txt", "r") as file: line = file.readline()

تُستخدم هذه الطريقة لقراءة الملف سطراً بعد سطر، وغالباً ما تُستخدم داخل الحلقات.

3. readlines(): قراءة جميع الأسطر في شكل قائمة

python
with open("example.txt", "r") as file: lines = file.readlines()

يُعيد هذا الأسلوب كل سطر كسلسلة مستقلة ضمن قائمة.


الكتابة في الملفات النصية

تستخدم الكتابة عندما تكون هناك حاجة إلى حفظ بيانات أو نتائج في ملف.

1. write(): الكتابة إلى ملف

python
with open("example.txt", "w") as file: file.write("مرحبا بك في عالم بايثون\n")

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

2. writelines(): كتابة قائمة من الأسطر

python
lines = ["السطر الأول\n", "السطر الثاني\n"] with open("example.txt", "w") as file: file.writelines(lines)

الإلحاق بمحتوى الملف (Append)

عند الحاجة لإضافة محتوى جديد دون حذف الموجود سابقاً، يستخدم النمط "a":

python
with open("example.txt", "a") as file: file.write("هذا السطر أضيف لاحقًا\n")

استخدام عبارة with في فتح الملفات

تعد أفضل ممارسة لأنها تضمن إغلاق الملف تلقائياً حتى في حالة حدوث خطأ أثناء التنفيذ.

python
with open("example.txt", "r") as file: data = file.read()

هذا الأسلوب أكثر أماناً مقارنة بـ file = open() متبوعًا بـ file.close().


التعامل مع المسارات

في بعض الأحيان يكون من الضروري التعامل مع الملفات في مسارات معينة، وهنا يظهر دور مكتبة os أو pathlib:

python
from pathlib import Path file_path = Path("/المجلد/الفرعي/example.txt") with open(file_path, "r") as file: print(file.read())

الجدول التالي يوضح أنماط فتح الملفات النصية ومعانيها

النمط (Mode) الوصف
"r" فتح الملف للقراءة فقط
"w" فتح الملف للكتابة (مع حذف محتواه)
"a" فتح الملف للإلحاق بالمحتوى
"x" إنشاء ملف جديد فقط
"b" فتح الملف كنص ثنائي (binary)
"t" فتح الملف كنص عادي (text)
"r+" فتح الملف للقراءة والكتابة
"w+" فتح الملف للكتابة والقراءة مع حذف المحتوى
"a+" فتح الملف للإلحاق مع إمكانية القراءة

قراءة وكتابة ملفات متعددة الأسطر باستخدام الحلقات

python
with open("example.txt", "r") as file: for line in file: print(line.strip())

وبنفس الطريقة يمكن الكتابة عبر حلقة:

python
lines = ["سطر 1\n", "سطر 2\n", "سطر 3\n"] with open("output.txt", "w") as file: for line in lines: file.write(line)

التعامل مع الملفات الكبيرة

عند التعامل مع ملفات ضخمة، يُفضّل استخدام القراءة عبر الحلقات بدلاً من read() لتفادي استهلاك الذاكرة بالكامل:

python
with open("bigfile.txt", "r") as file: for line in file: process(line)

حذف الملفات النصية

باستخدام مكتبة os يمكن حذف الملفات بكل سهولة:

python
import os if os.path.exists("example.txt"): os.remove("example.txt")

التحقق من وجود الملف قبل التعامل معه

python
from pathlib import Path if Path("example.txt").exists(): print("الملف موجود") else: print("الملف غير موجود")

الترميز (Encoding)

عند التعامل مع لغات غير الإنجليزية، مثل العربية، يجب تحديد الترميز المناسب مثل UTF-8:

python
with open("arabic.txt", "r", encoding="utf-8") as file: content = file.read()

قراءة ملفات بصيغة CSV كنصوص

python
with open("data.csv", "r") as file: for line in file: values = line.strip().split(",") print(values)

لكن الأفضل استخدام مكتبة csv المدمجة في بايثون لقراءة الملفات منسقة:

python
import csv with open("data.csv", newline='', encoding='utf-8') as csvfile: reader = csv.reader(csvfile) for row in reader: print(row)

إنشاء ملفات مؤقتة

باستخدام مكتبة `temp

Retry