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

الطباعة على الشاشة

من أسهل طرق إنتاج المخرجات هو استخدام التعليمة printحيث يمكن إسناد القيمة 0 أو تعابير أخرى مفصولة عن بعضها بفواصل. يحول هذا التابع التعابير التي يسندها المستخدم إلى سلسلة ويكتب النتيجة كخرج معياري كما في التالي:

#!/usr/bin/python

print "Python is really a great language,", "isn't it?";

فنظهر النتيجة التالية على الشاشة المعيارية

Python is really a great language, isn't it?

قراءة المدخل من لوحة المفاتيح

هناك تابعان مبنيان رئيسيان لقراءة سطر من نص مدخل كدخل معياري والذي هو لوحة المفاتيح بشكل افتراضي وهما:

  • raw_input
  • input

التابع raw_input

يقرأ هذا التابع سطراً واحداً من أداة الدخل المعيارية ويعيدها على شكل سلسلة (يزيل الأسطر الجديدة الزائدة).

#!/usr/bin/python

str = raw_input("Enter your input: ");
print "Received input is : ", str

يمكن هذا المستخدم من إدخال أية سلسلة وسوف يتم عرضها كما هي على الشاشة فثلاً عندما تتم طباعة “Hello Python!” فإن الخرج يكون :

Enter your input:Hello Python
Received input is:Hello Python

التابع input

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

#!/usr/bin/python 

str = input("Enter your input: ");
print "Received input is : ", str

فتظهر النتيجة التالية المعاكسة للدخل-

Enter your input: [x*5for xin range(2,10,2)]
Recieved input is: [10,20,30,40]

فتح وإغلاق الملفات

إلى الآن تعلم المستخدم كيفية التعامل مع الملفات الافتراضية في لغة البرمجة بايثون والآن سنرى كيفية استخدام ملفات البيانات الفعلية.
تؤمن لغة البرمجة بايثون التوابع والطرق الأساسية والضرورية لاستخدام الملفات بشكل افتراضي ويمكن تنفيذ ذلك بشكل أساسي باستخدام الغرض file.


التابع open

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

الشيفرة البرمجية

file object= open(file_name[,access_mode][, buffering])

يبين التالي شرحاً للمعاملات المستخدمة:

file_name : تمثل قيمة السلسلة التي تحتوي اسم الملف الذي تريد النفاذ إليه.
access_mode : تحدد النمط الذي سيتم فتح الملف وفقه. في الجدول أسفلاً هناك قائمة بالقيم المحتملة, يمثل هذا بارامتراً اختيارياً والنمط الافتراضي للوصول للملف هو القراءة (r).
buffering : إذا كانت قيمة هذا البارامتر 0 فإنه لا يحدث أبداً, وإذا كانت قيمته 1 فإنه يأخذ سطراً بينما يتم الوصول إلى الملف وإذا تم تخصيص قيمة لهذا البارامتر أكبر من ال 1 فعندها يتم تنفيذه وفق حجم البارامتر المؤشر عليه وإذا كان سالباً فإن حجم البارامتر عندها هو النظام الافتراضي أي يسلك السلوك الافتراضي.
يبين الجدول التالي قائمة بالطرق المختلفة لفتح ملف –

الطريقة الوصف
r تفتح الملف للقراءة فقط. والنمط الافتراضي هو توضع مؤشر الملف على بداية الملف.
rb تفتح الملف للقراءة فقط في حالة الصيغة الثنائية. والنمط الافتراضي هو توضع مؤشر الملف على بداية الملف.
r+ تفتح الملف للقراءة والكتابة حيثيتوضع مؤشر الملف على بداية الملف.
rb+ تفتح الملف للقراءة والكتابة في حالة الصيغة الثنائية حيث يتوضع مؤشر الملف على بداية الملف.
W تفتح الملف للكتابة فقط حيث تتم الكتابة إذا كان الملف موجوداً وإذا لم يكن موجوداً فإنها تنشئه للكتابة.
wb تفتح الملف للكتابة فقط في حالة الصيغة الثنائية حيث تتم الكتابة إذا كان الملف موجوداً وإذا لم يكن موجوداً فإنها تنشئه للكتابة.
w+ تفتح الملف للكتابة والقراءة حيث تتم الكتابة إذا كان الملف موجوداً وإذا لم يكن موجوداً فإنها تنشئه للكتابة والقراءة.
wb+ تفتح الملف للكتابة والقراءة في حالة الصيغة الثنائية حيث تتم الكتابة إذا كان الملف موجوداً وإذا لم يكن موجوداً فإنها تنشئه للكتابة والقراءة.
a تفتح الملف للإلحاق ويكون مؤشر الملف في نهاية الملف إذا كان الملف موجوداً مما يعني أن الملف في نمط الإلحاق أما إذا كان الملف غير موجود فإنها تنشئ ملفاً جديداً للكتابة.
ab تفتح الملف للإلحاق في حالة الصيغة الثنائية
a+ تفتح الملف للإلحاق والقراءة ويكون مؤشر الملف في نهاية الملف إذا كان الملف موجوداً مما يعني أن الملف في نمط الإلحاق أما إذا كان الملف غير موجود فإنها تنشئ ملفاً جديداً للكتابة والقراءة.
ab+ تفتح الملف للإلحاق والقراءة في حالة النمط الثنائي ويكون مؤشر الملف في نهاية الملف إذا كان الملف موجوداً مما يعني أن الملف في نمط الإلحاق أما إذا كان الملف غير موجود فإنها تنشئ ملفاً جديداً للكتابة والقراءة.

سمات الغرض file

عندما يتم فتح الملف والوصول إلى الغرض file فإنه من الممكن الحصول على المعلومات المرتبطة بهذا الملف, يمثل الجدول التالي أبرز السمات المرتبطة بالغرض:

السمة الوصف
file.closed تعيد القيمة صح إذا كان الملف مغلقاً والقيمة خطأ في حال عكس ذلك.
file.mode تعيد نمط الوصول مع الملف اذي تم فتحه.
file.name تعيد اسم الملف.
file.softspace تعيد القيمة خطأ إذا كان الفراغ مطلوباً عند الطباعة والقيمو صح في حال عكس ذلك.

مثال

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name
print "Closed or not : ", fo.closed
print "Opening mode : ", fo.mode
print "Softspace flag : ", fo.softspace

فتظهر النتيجة التالية

Name of the file:  foo.txt
Closed or not :  False
Opening mode :  wb
Softspace flag :  0

الطريقة close()

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

الشيفرة البرمجية

fileObject.close();

مثال

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name

# Close opend file
fo.close()

فتظهر النتيجة التالية

Name of the file: foo.txt

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


الطريقة write()

تكتب هذه الطريقة أية سلسلة إلى ملف مفتوح ومن المهم الانتباه إلى أن السلاسل في لغة البرمجة بايثون يمكن أن تكون بالصيغة الثنائية وليس فقط على شكل نص.
لا تضيف هذه الطريقة حرف السطر الجديد (‘\n’) إلى نهاية السلسلة-

الشيفرة البرمجية

fileObject.write(string);

مثال

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
fo.write( "Python is a great language.\nYeah its great!!\n");

# Close opend file
fo.close()

فتظهر النتيجة التالية

Python is a great language.
Yeah its great!!

الطريقة read()

تقرأ هذه الطريقة السلسلة ن ملف مفتوح ومن المهم الملاحظة أن سلاسل بايثون يمكن أن تكون بيانات ثنائية ما عدا البيانات النصية.

الشيفرة البرمجية

fileObject.read([count]);

مثال

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str
# Close opend file
fo.close()

فتظهر النتيجة التالية


Read String is: Python is

مواقع الملف

تعطي الطريقة tell()معلومات حول الموقع الحالي للملف بمعنى أن القراءة أو الكتابة التالية يحدث لعدة بايتات من بداية الملف.

تغير الطريقة seek(offset[, from]الموقع الحالي للملف كما أن المدخل offsetيؤشر على عدد البايتات التي سيتم النقل وفقها. ويوصف المدخل fromالموقع المرجعيالذي سيتم نقل البايتات منه.

مثال

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str

# Check current position
position = fo.tell();
print "Current file position : ", position

# Reposition pointer at the beginning once again
position = fo.seek(0, 0);
str = fo.read(10);
print "Again read String is : ", str
# Close opend file
fo.close()

فتظهر النتيجة التالية

Read String is : Python is
Current file position :  10
Again read String is :  Python is

إعادة تسمية وحذف الملفات

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


الطريقة rename()

تأخذ هذه الطريقة مدخلين أحدهما هو الاسم الحالي للملف والآخر هو الاسم الجديد.

الشيقرة البرمجية

os.rename(current_file_name,new_file_name)

مثال

#!/usr/bin/python
import os

# Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )

الطريقة remove()

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

الشيفرة البرمجية

os.remove(file_name)

مثال

#!/usr/bin/python
import os

# Delete file test2.txt
os.remove("text2.txt")

الاتجاهات في بايثون

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

الطريقة mkdir()

تستخدم هذه الطريقة لإنشاء الاتجاهات ضمن الاتجاه الحالي حيث يتم إدخال الاتجاه المطلوب كمدخل إلى هذه الطريقة.

الشيفرة البرمجية

os.mkdir("newdir")

مثال

#!/usr/bin/python
import os

# Create a directory "test"
os.mkdir("test")

الطريقة chdir()

تستخدم هذه الطريقة لتغيير الاتجاه الحالي حيث تأخذ مدخلاً والذي يمثل اسم الاتجاه الذي سيكون الاتجاه الحالي.

الشيفرة البرمجية

os.chdir("newdir")

مثال

#!/usr/bin/python

import os 

# Changing a directory to "/home/newdir"
os.chdir("/home/newdir")

الطريقة getcwd()

تعرض هذه الطريقة اتجاه العمل الحالي.

الشيفرة البرمجية

os.getcwd()

مثال

#!/usr/bin/python

import os 

# This would give location of the current directory
os.getcwd()

الطريقة rmdir()

تحذف هذه الطريقة الاتجاه والذي يتم إدخاله كمدخل لهذه الطريقة, قبل إزالة الاتجاه يجب إزالة كافة المكونات الموجودة ضمنه.

الشيفرة البرمجية

os.rmdir('dirname')

مثال

#!/usr/bin/python
import os

# This would  remove "/tmp/test"  directory.
os.rmdir( "/tmp/test"  )

الطرق المرتبطة بالاتجاه والملف

هناك ثلاثة مصادر هامة تؤمن مجالاً واسعاً لضبط الاتجاهات على النوافذ في نظام التشغيل unix وهي كالتالي-

  • طرق الغرض file : الغرض file يؤمن العديد من التوابع للتعامل مع الملفات.
  • طرق الغرض os : تؤمن العديد من التوابع لمعالجة الملفات بنفس جودة التعامل مع الاتجاهات.