التعامل مع الملفات النصية في بايثون: دليل شامل وموسع
يُعد التعامل مع الملفات النصية أحد الأساسيات في أي لغة برمجة، ولا تختلف لغة بايثون عن غيرها في هذا المجال، بل إنها تقدّم واجهة غنية وسهلة للتعامل مع الملفات النصية بجميع أشكالها. تعتبر عمليات قراءة الملفات، وكتابتها، وتعديلها، وحذفها من أهم الوظائف التي يحتاج إليها أي مطوّر أو مبرمج عند العمل على أنظمة تعتمد على إدخال وإخراج البيانات (I/O). في هذا المقال، سيتم التوسّع بشكل علمي وعملي في جميع المفاهيم المتعلقة بالتعامل مع الملفات النصية باستخدام لغة بايثون، مع تقديم أمثلة عملية وتوضيحات تقنية مفصلة.
المفهوم العام للملفات النصية في بايثون
الملفات النصية هي ملفات تحتوي على بيانات غير منسقة بتنسيق ثنائي، حيث يتم تمثيل المحتوى كسلسلة من الأحرف. الملفات النصية غالباً ما تكون بامتداد .txt، ولكن يمكن أن تشمل أيضاً أنواعاً أخرى مثل .csv أو .log أو .json طالما يتم تمثيلها كنص قابل للقراءة.
في بايثون، يتم التعامل مع الملفات باستخدام الدالة المدمجة open()، والتي تسمح بفتح الملفات بأنماط متعددة للتحكم في طريقة التعامل مع المحتوى، سواء بالقراءة أو الكتابة أو الإضافة أو التعديل.
فتح الملفات النصية: دالة open()
pythonfile = open("example.txt", "r")
الدالة open() تتطلب على الأقل وسيطين:
-
اسم الملف أو المسار الكامل.
-
نمط الفتح (mode) مثل:
-
"r": للقراءة. -
"w": للكتابة (يمسح محتوى الملف أولاً). -
"a": للإلحاق بنهاية الملف دون حذف المحتوى. -
"x": لإنشاء ملف جديد فقط، ويعطي خطأ إذا كان الملف موجوداً. -
"b": للملفات الثنائية (binary). -
"t": للنصوص (الوضع الافتراضي). -
"+": للقراءة والكتابة في نفس الوقت.
-
قراءة الملفات النصية
هناك عدة طرق لقراءة الملفات النصية في بايثون، وتختلف حسب الحاجة إلى معالجة المحتوى:
1. read(): قراءة كل محتوى الملف دفعة واحدة
pythonwith open("example.txt", "r") as file:
content = file.read()
هذه الطريقة مفيدة إذا كان الملف صغيراً وتريد تحميل كل محتوياته دفعة واحدة في الذاكرة.
2. readline(): قراءة سطر واحد فقط
pythonwith open("example.txt", "r") as file:
line = file.readline()
تُستخدم هذه الطريقة لقراءة الملف سطراً بعد سطر، وغالباً ما تُستخدم داخل الحلقات.
3. readlines(): قراءة جميع الأسطر في شكل قائمة
pythonwith open("example.txt", "r") as file:
lines = file.readlines()
يُعيد هذا الأسلوب كل سطر كسلسلة مستقلة ضمن قائمة.
الكتابة في الملفات النصية
تستخدم الكتابة عندما تكون هناك حاجة إلى حفظ بيانات أو نتائج في ملف.
1. write(): الكتابة إلى ملف
pythonwith open("example.txt", "w") as file:
file.write("مرحبا بك في عالم بايثون\n")
يجب الحذر عند استخدام نمط "w"، حيث يتم حذف كل محتوى الملف قبل كتابة الجديد.
2. writelines(): كتابة قائمة من الأسطر
pythonlines = ["السطر الأول\n", "السطر الثاني\n"]
with open("example.txt", "w") as file:
file.writelines(lines)
الإلحاق بمحتوى الملف (Append)
عند الحاجة لإضافة محتوى جديد دون حذف الموجود سابقاً، يستخدم النمط "a":
pythonwith open("example.txt", "a") as file:
file.write("هذا السطر أضيف لاحقًا\n")
استخدام عبارة with في فتح الملفات
تعد أفضل ممارسة لأنها تضمن إغلاق الملف تلقائياً حتى في حالة حدوث خطأ أثناء التنفيذ.
pythonwith open("example.txt", "r") as file:
data = file.read()
هذا الأسلوب أكثر أماناً مقارنة بـ file = open() متبوعًا بـ file.close().
التعامل مع المسارات
في بعض الأحيان يكون من الضروري التعامل مع الملفات في مسارات معينة، وهنا يظهر دور مكتبة os أو pathlib:
pythonfrom 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+" |
فتح الملف للإلحاق مع إمكانية القراءة |
قراءة وكتابة ملفات متعددة الأسطر باستخدام الحلقات
pythonwith open("example.txt", "r") as file:
for line in file:
print(line.strip())
وبنفس الطريقة يمكن الكتابة عبر حلقة:
pythonlines = ["سطر 1\n", "سطر 2\n", "سطر 3\n"]
with open("output.txt", "w") as file:
for line in lines:
file.write(line)
التعامل مع الملفات الكبيرة
عند التعامل مع ملفات ضخمة، يُفضّل استخدام القراءة عبر الحلقات بدلاً من read() لتفادي استهلاك الذاكرة بالكامل:
pythonwith open("bigfile.txt", "r") as file:
for line in file:
process(line)
حذف الملفات النصية
باستخدام مكتبة os يمكن حذف الملفات بكل سهولة:
pythonimport os
if os.path.exists("example.txt"):
os.remove("example.txt")
التحقق من وجود الملف قبل التعامل معه
pythonfrom pathlib import Path
if Path("example.txt").exists():
print("الملف موجود")
else:
print("الملف غير موجود")
الترميز (Encoding)
عند التعامل مع لغات غير الإنجليزية، مثل العربية، يجب تحديد الترميز المناسب مثل UTF-8:
pythonwith open("arabic.txt", "r", encoding="utf-8") as file:
content = file.read()
قراءة ملفات بصيغة CSV كنصوص
pythonwith open("data.csv", "r") as file:
for line in file:
values = line.strip().split(",")
print(values)
لكن الأفضل استخدام مكتبة csv المدمجة في بايثون لقراءة الملفات منسقة:
pythonimport csv
with open("data.csv", newline='', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
إنشاء ملفات مؤقتة
باستخدام مكتبة `temp

