يغطي هذا القسم كيفية القراءة من الملفات في بايثون وكيفية الكتابة إليها.
تحتاج إلى ثلاث خطوات لقراءة نص من ملف:
أنشئ ملف poem.txt
في المحرر واكتب أي قصيدة فيه.
احفظ الملف.
في المثال التالي، نستخدم الترميز utf-8
، والذي
يغطي غالبية الأحرف الأوروبية و العربية.
هناك ترميزات (encodeing) أخرى تغطي مجموعات حروف مختلفة. إذا كنت ترغب في معرفة المزيد عن الترميزات(encoding)، يمكنك قراءة هذه المقالة سهلة القراءة مقال الترميز(encoding)
هيا ننشئ الكود التالي:
poem_file = open('poem.txt', encoding='utf-8')
content = poem_file.read()
print(content)
poem_file.close()
قم بتشغيله في المجلد الذي يحتوي على poem.txt
. بمعنى آخر، يجب أن يكون مجلد العمل الحالي
يحتوي على الملف الذي به القصيدة.
يطبع البرنامج القصيدة!
ما الذي يحدث هنا؟
تُرجع الدالة ()open
القيمة التي تمثل الملف المفتوح (open file).
هذه القيمة لها طرقها الخاصة (methods).
نحن نستخدم الطريقة ()read
التي تقرأ المحتويات الكاملة
للملف مرة واحدة وتُرجعها كنص (string).
سنتناول ()close
، الدالة التي تغلق الملف المفتوح، لاحقًا.
يمكنك استخدام الملفات المفتوحة مع عبارة for
.
إنه مشابه لما هو الحال مع النصوص أو النطاقات.
يوفر for i in range
أرقامًا متسلسلة.
يوفر for c in 'abcd'
أحرفًا نصية مفردة.
يوفر :for line in poem_file
أسطرًا فردية تُقرأ من الملف إلى المتغير line
.
على سبيل المثال، يمكننا وضع مسافة بادئة للقصيدة لجعلها تبرز من النص.
print('I heard this poem:')
print()
poem_file = open('poem.txt', encoding='utf-8')
for line in poem_file:
print(' ' + line)
poem_file.close()
print()
print('How do you like it?')
عند تجربته، ستجد أن المسافات ليست كما ينبغي أن تكون. هل ترغب في محاولة شرح سبب ذلك؟
من المهم جدًا إغلاق الملف بعد توقف البرنامج عن استخدامه.
تقوم الطريقة ()close
بذلك نيابة عنا.
لدى أنظمة التشغيل حدود على الملفات المفتوحة.
إذا لم تغلقها، يمكنك تجاوز هذا الحد.
إلى جانب ذلك، في نظام التشغيل Windows، لا يمكنك إعادة فتح ملف مفتوح بالفعل.
يمكنك مقارنة الملفات بالثلاجة: إذا كنت ترغب في وضع شيء ما في الثلاجة، تحتاج إلى فتحه ثم إغلاقه. تعمل الثلاجة بدون إغلاق أيضًا، ولكن بعد ذلك يفسد شيء ما.
من السهل نسيان إغلاق ملف.
على سبيل المثال، يمكن لاستثناء أو عبارة return
داخل
قد تتخطى معالجة الملف ()close
.
ثم يبقى الملف مفتوحًا.
يمكننا استخدام عبارة try/finally
للتأكد من إغلاق الملف.
يتم تنفيذ كتلة finally
(العبارات الموجودة بعد finally
) دائمًا.
يتم تنفيذه بغض النظر عما إذا كانت كتلة try
تنتهي بنجاح،
أو باستثناء، أو إذا قفزت منها باستخدام return
أو break
.
def initial_character():
"""Return the first character in the poem."""
# تُرجع الحرف الأول في القصيدة.
poem_file = open('poem.txt', encoding='utf-8')
try:
content = poem_file.read()
return content[0]
finally:
poem_file.close()
print(initial_character())
يمكنك استخدام كتلة finally
في كل مرة تحتاج فيها
لإغلاق أو إنهاء شيء ما - ليس مجرد ملف،
يمكن أن يكون أيضًا اتصال قاعدة بيانات.
with
(The with
statement)نظرًا لأن كتلة try/finally
مطولة جدًا،
هناك طريقة أفضل في بايثون. إنها عبارة with
، التي رأيناها أثناء
الاختبار السلبي باستخدام pytest (مع ()pytest.raises
):
def initial_character():
"""Return the first character in the poem."""
# تُرجع الحرف الأول في القصيدة.
with open('poem.txt', encoding='utf-8') as poem_file:
content = poem_file.read()
return content[0]
print(initial_character())
استخدمنا هذه العبارة للاختبار من قبل.
إنها تغلف كتلة باستثناء متوقع.
تتحقق مما إذا كان الاستثناء الصحيح قد حدث
بعد انتهاء الكتلة.
في حالتنا، يتم إغلاق الملف عند انتهاء الكتلة
بغض النظر عما حدث.
يتم إغلاق الملف في جميع الحالات
إذا انتهت كتلة with
بنجاح،
أو باستثناء، أو إذا كنا نقفز منها.
عبارة with
هي الخيار الأفضل للعمل مع الملفات
في غالبية الحالات.
تنبيه!
من السهل حذف أو الكتابة فوق أي ملف في بايثون. جرب الأمثلة التالية في مجلد ليس لديك فيه أي شيء مهم!
يمكنك الكتابة إلى ملف في بايثون.
تحتاج إلى فتح الملف للكتابة باستخدام وسيط مُسمى
mode='w'
(w
تعني كتابة - write).
يمكنك كتابة نصوص فردية باستخدام الطريقة ()write
.
إذا كان الملف موجودًا بالفعل، فإن فتحه باستخدام mode='w'
يكتب فوق
محتواه الأصلي. لن يكون هناك سوى النص الذي يكتبه برنامجك
فيه.
with open('second-poem.txt', mode='w', encoding='utf-8') as poem_file:
poem_file.write('Our old chiming clock\n')
poem_file.write("Is beating four o'clock\n")
لماذا يوجد `\n`؟
لا تضع الطريقة ()write
نهاية سطر بعد النص.
إذا كنت بحاجة إلى كتابة عدة أسطر في ملفات، فأنت بحاجة إلى
إنهاء كل منها بحرف سطر جديد '\n'
. لقد وصفناه
في درس النصوص (Strings).
أو، يمكنك استخدام الدالة ()print
.
افتراضيًا،كما تكتب الدالة الى ال(terminal).
يمكنها أيضًا الكتابة إلى ملف مفتوح إذا استخدمت الوسيط المُسمى file
.
تبقى خيارات ()print
الأخرى دون تغيير. تتضمن هذه الخيارات
نهاية السطر، والتحويل إلى نصوص، وطباعة عدة وسائط في وقت واحد.
with open('second-poem.txt', mode='w', encoding='utf-8') as poem_file:
print('Our old chiming clock', file=poem_file)
print('Is beating', 2+2, "o'clock", file=poem_file)
يمكن تخزين JSON
في ملفات txt.
او json.
أيضًا. يتم ذلك بطريقة مماثلة، نحتاج فقط إلى استيراد مكتبة json
.
إذا أردنا تخزين بياناتنا من قاموس في الملف، فيمكننا استخدام الكود التالي:
data = {
"name": "Ali",
"city": "Omdurman",
"languages": ["Arabic", "English", "Python"],
"age": 26
}
import json
with open('json_data.json', mode='w', encoding='utf-8') as json_file:
json.dump(data, json_file)
import json
with open('json_data.json') as json_file:
data = json.load(json_file)
print(data)
في الدرس السابق json عرضنا أيضًا تحميل JSON من نص (string) والكتابة إلى نص، و استخدمنا الطريقتين loads
و dumps
. يمثل الحرف s
في النهاية string
. يمكنك تذكر الفرق بين load
و loads
بهذه الطريقة.
لقراءة أو كتابة csv
يمكنك استخدام مكتبة csv
المضمنة.
بالنسبة لانواع البيانات الأخرى مثل ملفات Excel
، تحتاج إلى تثبيت مكتبات خارجية.
للعمل مع البيانات الجدولية(tabular data)، الأسهل هو استخدام مكتبة pandas
- والتي تحتاج أيضًا إلى تثبيت إضافي.