الملفات في مواقع مختلفة والعمل مع ملفات القيم المفصولة بفواصل

14.3 الملفات في مواقع مختلفة والعمل مع ملفات القيم المفصولة بفواصل

أهداف التعلم

في نهاية هذا القسم، ينبغي أن تكون قادرًا على:

  • توضيح كيفية الوصول إلى الملفات داخل نظام الملفات.
  • توضيح كيفية معالجة ملف CSV (ملفات القيم المفصولة بفواصل).

فتح ملف في أي موقع

عند استخدام اسم الملف فقط كوسيط للدالّة open()، ينبغي أن يكون الملف في المجلد نفسه الذي يوجد فيه ملف بايثون الذي يُنفَّذ. مثال: لكي يُنفَّذ fileobj = open("file1.txt") في files.py بنجاح، يجب أن يكون ملف file1.txt في المجلد نفسه الذي يوجد فيه files.py.

غالبًا ما يحتاج المبرمج إلى فتح ملفات من مجلدات غير المجلد الذي يوجد فيه ملف بايثون. يُحدِّد المسار موقع مجلد على الحاسوب بشكل فريد. يمكن استخدام المسار مع اسم الملف لفتح ملف في أي موقع مجلد. مثال: لفتح ملف باسم logfile.log موجود في /users/turtle/desktop، يمكن استخدام ما يلي:

fileobj = open("/users/turtle/desktop/logfile.log")

نظام التشغيل موقع الملف

مثال على دالّة open()

ماك

/users/student/

fileobj = open("/users/student/output.txt")

لينكس

/usr/code/

fileobj = open("/usr/code/output.txt")

ويندوز

c:\projects\code\

fileobj = open("c:/projects/code/output.txt")
أو
fileobj = open("c:\\projects\\code\\output.txt")

جدول 14.2 فتح الملفات في مسارات مختلفة. في كل من الحالات التالية، يوجد ملف باسم output.txt في مجلد مختلف عن مجلد بايثون. يستخدم ويندوز أحرف الشرطة المائلة العكسية (\) بدلاً من أحرف الشرطة المائلة الأمامية (/) للمسار. إذا ضُمِّنت الشرطة المائلة العكسية مباشرة في
open()
، فستكون هناك حاجة إلى شرطة مائلة عكسية إضافية لكي يفهم بايثون الموقع بشكل صحيح.

مفاهيم تطبيقية

فتح الملفات في مواقع مختلفة

لكل سؤال، افترض أن ملف بايثون الذي ينفذ دالّة open() ليس في المجلد نفسه الذي يوجد فيه ملف out.txt.

يشير كل سؤال إلى موقع ملف out.txt، ونوع الحاسوب، والوضع المطلوب لفتح الملف. اختر الخيار الأفضل لفتح ملف out.txt.

1.
/users/turtle/files على جهاز ماك للقراءة
  1. fileobj = open("out.txt")
  2. fileobj = open("/users/turtle/files/out.txt")
  3. fileobj = open("/users/turtle/files/out.txt", 'w')
2.
c:\documents\ على حاسوب ويندوز للقراءة
  1. fileobj = open("out.txt")
  2. fileobj = open("c:/documents/out.txt", 'a')
  3. fileobj = open("c:/documents/out.txt")
3.
/users/turtle/logs على حاسوب لينكس للكتابة
  1. fileobj = open("out.txt")
  2. fileobj = open("/users/turtle/logs/out.txt")
  3. fileobj = open("/users/turtle/logs/out.txt", 'w')
4.
c:\proj\assets على حاسوب ويندوز في وضع الإلحاق
  1. fileobj = open("c:\\proj\\assets\\out.txt", 'a')
  2. fileobj = open("c:\proj\assets\out.txt", 'a')

العمل مع ملفات القيم المفصولة بفواصل

في بايثون، تُقرأ الملفات وتُكتب بترميز يونيكود (Unicode) افتراضيًا. تستخدم العديد من تنسيقات الملفات الشائعة يونيكود، مثل الملفات النصية (.txt)، وملفات شِفرة بايثون (.py)، وملفات الشِفرة الأخرى (.c،.java).

تُستخدم ملفات القيم المفصولة بفواصل (CSV, .csv) غالبًا لتخزين البيانات الجدولية. تخزن هذه الملفات الخلايا كنصوص يونيكود مفصولة بفواصل. يمكن قراءة ملفات CSV باستخدام التوابع التي تعلمناها حتى الآن، كما هو موضح في المثال أدناه.

ملف CSV معروض في برنامج جداول بيانات، يظهر البيانات في صفوف وخلايا، وفي محرر نصوص، يوضح تنسيقه الخام للقيم المفصولة بفواصل.
شكل 14.2 ملفات CSV. ملف CSV هو ببساطة ملف نصي بصفوف مفصولة بأحرف سطر جديد
\n
وخلايا مفصولة بفواصل.

النص الخام للملف:

Title, Author, Pages\n1984, George Orwell, 268\nJane Eyre, Charlotte Bronte, 532\nWalden, Henry David Thoreau, 156\nMoby Dick, Herman Melville, 538

مثال 14.3

معالجة ملف CSV

    """Processing a CSV file."""
    # فتح ملف CSV للقراءة
    file_obj = open("books.csv")

    # الصفوف مفصولة بأحرف سطر جديد \n، لذا يمكن استخدام readlines() لقراءة جميع الصفوف في قائمة سلاسل نصية
    csv_rows = file_obj.readlines()

    list_csv = []

    # إزالة أحرف \n من كل صف وتقسيمه بالفاصلة وحفظه في بنية ثنائية الأبعاد
    for row in csv_rows:
      # إزالة حرف \n
      row = row.strip("\n")
      # التقسيم باستخدام الفواصل
      cells = row.split(",")
      list_csv.append(cells)
    
    # طباعة النتيجة
    print(list_csv)

مخرجات الشِفرة هي:

    [['Title', ' Author', ' Pages'], ['1984', ' George Orwell', ' 268'], ['Jane Eyre', ' Charlotte Bronte', ' 532'], ['Walden', ' Henry David Thoreau', ' 156'], ['Moby Dick', ' Herman Melville', ' 538']]

مفاهيم تطبيقية

أنواع الملفات وملفات CSV

5.
لماذا تعمل الدالّة readlines() لقراءة الصفوف في ملف CSV؟
  1. readlines() تقرأ سطرًا بسطر باستخدام حرف السطر الجديد \n.
  2. readlines() غير مناسبة لقراءة ملف CSV.
  3. readlines() تتعرف تلقائيًا على ملف CSV وتعمل وفقًا لذلك.
6.
بالنسبة للشِفرة في المثال، ما هي المخرجات لتعليمة print(list_csv[1][2])؟
  1. 532
  2. 268
  3. Jane Eyre
7.
ما هي مخرجات الشِفرة التالية لملف books.csv الموضح أعلاه؟
file_obj = open("books.csv")

csv_read = file_obj.readline()

print(csv_read)
  1. ['Title, Author, Pages\n', '1984, George Orwell, 268\n', 'Jane Eyre, Charlotte Bronte, 532\n', 'Walden, Henry David Thoreau, 156\n', 'Moby Dick, Herman Melville, 538']
  2. [['Title', ' Author', ' Pages'], ['1984', ' George Orwell', ' 268'], ['Jane Eyre', ' Charlotte Bronte', ' 532'], ['Walden', ' Henry David Thoreau', ' 156'], ['Moby Dick', ' Herman Melville', ' 538']]
  3. Title, Author, Pages

مزيد من الاستكشاف

تُرمَّز الملفات مثل مستندات وورد (.docx) ومستندات PDF (.pdf)، وتنسيقات الصور مثل رسومات الشبكة المحمولة (PNG, .png) ومجموعة خبراء التصوير المشترك (JPEG, .jpeg أو .jpg)، بالإضافة إلى العديد من أنواع الملفات الأخرى، بطرق مختلفة.

يمكن قراءة بعض أنواع الملفات غير اليونيكود باستخدام مكتبات متخصصة تدعم قراءة وكتابة أنواع مختلفة من الملفات.

PyPDF هي مكتبة شائعة يمكن استخدامها لاستخراج المعلومات من ملفات PDF.

BeautifulSoup يمكن استخدامها لاستخراج المعلومات من ملفات XML و HTML. عادةً ما تحتوي ملفات XML و HTML على يونيكود مع بنية مُنظَّمة بواسطة وسوم الأقواس الزاوية <>.

python-docx يمكن استخدامها لقراءة وكتابة ملفات DOCX.

بالإضافة إلى ذلك، csv هي مكتبة مُضمَّنة يمكن استخدامها لاستخراج المعلومات من ملفات CSV.

جرّب بنفسك

معالجة ملف CSV

يحتوي ملف fe.csv على درجات مجموعة من الطلاب في امتحان نهائي. اكتب برنامجًا لعرض متوسط الدرجات.