التابع 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 الوحدة الفرعية