التابع PyZipFile.writepy()‎‎ في بايثون

من موسوعة حسوب


يبحث التابع عن الملفات ذات الامتداد ‎*.py ويضيف الملف المقابل إلى الأرشيف.

إن لم تتوفر قيمة للمعامل optimize في الدالة البانية للصنف PyZipFile أو أعطيت القيمة ‎-1، فإنّ الملف المقابل يكون من الامتداد ‎*.pyc ويجري تصريفه إن دعت الحاجة إلى ذلك. أما إن أعطيت إحدى القيم 0 أو 1 أو 2 فستضاف الملفات التي تمتلك مستويات التحسين هذه فقط (راجع الدالة compile()) إلى الأرشيف، وستُصرّف إن دعت الحاجة إلى ذلك.

البنية العامة

writepy(pathname, basename='', filterfunc=None)

‎المعاملات

pathname

إن كانت قيمة هذا المعامل ملفًّا فيجب أن ينتهي اسم هذا الملف بالامتداد ‎.py وسيضاف ملف ‎*.pyc المقابل في المستوى العلوي (لا توجد معلومات عن المسار).

إن كانت قيمة هذا المعامل ملفًّا لا ينتهي اسمه بالامتداد ‎.py، يُطلق التابع الاستثناء RuntimeError. وإن كانت قيمة المعامل مجلّدًا ليس مجلّد حزمة، فإنّ جميع ملفات ‎*.pyc ستضاف في المستوى العلوي، أما إن كان المجلّد مجلّد حزمة، فإنّ جميع ملفات ‎*.pyc ستضاف تحت اسم الحزمة كمسار للملف، وإن تضمّن المجلّد المعطى مجلّدات حزم فرعية، فإنّها ستضاف تعاوديًا وبحسب ترتيبها إلى الأرشيف.

basename

يستخدم هذا المعامل داخليًا فقط.

filterfunc

معامل اختياري، يجب أن يكون دالة ذات وسيط واحد وهو سلسلة نصية. سُتمرّر هذه الدالة إلى كل مسار في الأرشيف (ومن ضمنها جميع المسارات الكاملة المفردة للملفات) قبل إضافة هذه المسارات إلى الأرشيف.

إن أخذ هذا المعامل قيمة False لن يُضاف المسار إلى الأرشيف، وإن كانت قيمة pathname مجلّدًا فإنّ التابع سيتجاهل جميع محتويات ذلك المجلّد.

ملاحظات:

  • أضيف المعامل filterfunc في الإصدار 3.4 من بايثون.
  • أصبح بالإمكان استخدام كائنات شبيهة بالمسارات كقيمة للمعامل pathname في الإصدار 3.6 من بايثون.
  • تترتّب عناصر المجلّد عند إضافتها تعاوديًا في الإصدار 3.7 من بايثون.

أمثلة

إن كانت جميع ملفات الاختبارات موجودة في المجلد test أو تبدأ بالعبارة ‎test_‎ يمكن استخدام المعامل filterfunct لإقصائها:

>>> zf = PyZipFile('myprog.zip')
>>> def notests(s):
...     fn = os.path.basename(s)
...     return (not (fn == 'test' or fn.startswith('test_')))
>>> zf.writepy('myprog', filterfunc=notests)

يُنشئ التابع writepy()‎ ملفات أرشيف تحمل أسماء مشابهة لما يلي:

string.pyc                   # اسم ملف في المستوى العلوي
test/__init__.pyc            # مجلّد حزمة
test/testall.pyc             # test.testall الوحدة
test/bogus/__init__.pyc      # مجلّد حزمة فرعي
test/bogus/myfile.pyc        # test.bogus.myfile الوحدة الفرعية

مصادر