16  الإشارة للملفات

موضع الملفات

تقع الملفات في جهاز الحاسب ضمن ملفات أخرى على هذا النحو (في أنظمة ويندوز Windows):

C:\
└── Users
    └── Adam
        └── MyProject
            ├── data
            │   └── datafile.csv
            └── scripts
                └── analysis.py

فالحرف الأوَّل في الأعلى (C:) يمثِّل مكان جهاز التخزين. وإن رأيت D: أو E: فيعني أن الملفات تخزن في جهازين آخرين.

وقد تتساءل لماذا لم نبدأ بالحرف A: أو B:؟ وسبب ذلك تاريخي. وذلك أنَّهما كانا محجوزين للإشارة لجهاز تخزين عتيق يسمى القرص المرن (floppy disk)، ولم يعد يستعمل.

أما في أنظمة لينكس (Linux) وماك (MacOS) فإن الأصل يعبَّر عنه لا بحرف، وإنما بالمسار الجذر: / على النحو التالي:

/
└── home
    └── adam
        ├── projects
            └── myproject
                ├── data
                │   └── datafile.csv
                └── scripts
                    └── analysis.py

وتسمى الملفات المتضمنة لملفات أخرى: دليل (Directory). وهو الذي يعبَّر عنه فيما ترى في الواجهة الرسومية على شكل مجلَّد (Folder).

Folder Icon

فإذًا الملفات على نوعين:

  1. ملف (File): وهو الذي يحوي بيانات نصية أو ثنائية. مثل:
    • datafile.csv ملف بيانات جدولية
    • analysis.py ملف برنامج بايثون
  2. دليل (Directory): وهو قائمة من الملفات والأدلة. مثل:
    • data دليل / مجلد البيانات
    • myproject دليل / مجلد المشروع

صيغة الملف (File Extension) تُعرَفُ بالحروف بعد آخر نقطة. مثل:

  • datafile.csv صيغة csv
  • analysis.py صيغة py

المسار هو نص يحدد موقع الملف في النظام. وهو ضربان:

  1. مطلق (absolute): يحدد المسار بشكل كامل بدءًا من الجذر.
  2. نسبي (relative): يحدد المسار بالنسبة لموقع الملف الحالي.
    • معنى النقطة . هو الدليل الحالي.
    • معنى النقطتين .. الصعود مرة
Path Example
Absolute /home/adam/projects/myproject/scripts/analysis.py
Relative ../data/datafile.csv

فالمسار الثاني بالنسبة للملف analysis.py صحيح، لكن ليس بالنسبة لأي ملف آخر غيره خارج نفس المجلد. فهو صعودٌ للأعلى مرةً، ثم الدخول إلى الدليل data الذي يقع أسفله، ثم الوصول إلى الملف datafile.csv.

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

فيه ثلاثة خطوات:

  1. نفتح الملف open(): وهذا طلبٌ من نظام التشغيل الإذنَ (بحسب mode الإذن بالقراءة r أو الإذن بالكتابة w أو الإذن بالقراءة والكتابة rw)؛ ونحصل في النتيجة على مؤشر يشير إليه.
  2. . نقرأ الملفfile.read() فيتم نسخ محتواه من التخزين إلى الذاكرة
  3. ولا بُد من تسريحه بعد الفراغ منه باستعمال file.close()

وذلك على النحو التالي:

f = open(file='../../datasets/example_root/a/a.txt', mode='r')
content = f.read()
f.close()

print(content)
lorem ipsum dolfet
weilfur badem zelfur

وهكذا نكتب في الملف باستعمال file.write()، بعد فتح الملف بوضع الكتابة 'w' في open(mode='w'):

content = """Salam everyone,
I hope you are enjoying the course,

Thank you.
"""

f = open(file='../../datasets/example_root/a/zzz.txt', mode='w')
f.write(content)
f.close()

print(content)
Salam everyone,
I hope you are enjoying the course,

Thank you.

انظر توثيق قراءة وكتابة الملفات.

ولأن الإغلاق ضروري بعد كل فتح؛ فقد وفرت بايثون لذلك مركبًا لغويًّا يُعرف بإدارة السياق. فالملف نوعٌ يعتبر مدير سياق (Context Manager) فيجوز استعمال with وتضمين القطعة في سياقها الذي يتكفل بإغلاق الملف تلقائيّا عند نهاية آخر جملة في قطعة داخلها. وذلك على النحو التالي:

contents = ''
with open(file='../../datasets/example_root/a/a.txt', mode='r') as f:
    contents = f.read()
print(contents)
lorem ipsum dolfet
weilfur badem zelfur