الفرق بين المراجعتين لصفحة: «Python/PyZipFile/writepy»

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:التابع <code>PyZipFile.writepy()‎‎</code> في بايثون}}</noinclude> يبحث التابع عن الملفات ذات الام...'
 
لا ملخص تعديل
 
سطر 3: سطر 3:
يبحث التابع عن الملفات ذات الامتداد <code>‎*.py</code> ويضيف الملف المقابل إلى الأرشيف.
يبحث التابع عن الملفات ذات الامتداد <code>‎*.py</code> ويضيف الملف المقابل إلى الأرشيف.


إن لم تتوفر قيمة للمعامل optimize في الدالة البانية للصنف PyZipFile أو أعطيت القيمة ‎-فإنّ الملف المقابل يكون من الامتداد ‎*.pycfile ويجري تصريفه إن دعت الحاجة إلى ذلك. أما إن أعطيت إحدى القيم 0 أو 1 أو 2 فستضاف الملفات التي تمتلك مستويات التحسين هذه فقط (راجع التابع compile()‎) إلى الأرشيف، وستُصرّف إن دعت الحاجة إلى ذلك.
إن لم تتوفر قيمة للمعامل <code>optimize</code> في الدالة البانية للصنف <code>PyZipFile</code> أو أعطيت القيمة ‎<code>-1</code>، فإنّ الملف المقابل يكون من الامتداد ‎<code>*.pyc</code> ويجري تصريفه إن دعت الحاجة إلى ذلك. أما إن أعطيت إحدى القيم <code>0</code> أو <code>1</code> أو <code>2</code> فستضاف الملفات التي تمتلك مستويات التحسين هذه فقط (راجع الدالة <code>[[Python/compile|compile()]]</code>) إلى الأرشيف، وستُصرّف إن دعت الحاجة إلى ذلك.
 
==البنية العامة==
== البنية العامة ==
 
<syntaxhighlight lang="python3">
<syntaxhighlight lang="python3">
writepy(pathname, basename='', filterfunc=None)
writepy(pathname, basename='', filterfunc=None)
</syntaxhighlight>
</syntaxhighlight>
== المعاملات ==
=== pathname ===
إن كانت قيمة هذا المعامل ملفًّا فيجب أن ينتهي اسم هذا الملف بالامتداد ‎.py وسيضاف ملف ‎*.pyc المقابل في المستوى العلوي (لا توجد معلومات عن المسار).


== ‎المعاملات ==
‎<code>pathname</code>


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


=== basename ===
إن كانت قيمة هذا المعامل ملفًّا لا ينتهي اسمه بالامتداد <code>‎.py</code>، يُطلق التابع الاستثناء <code>RuntimeError</code>. وإن كانت قيمة المعامل مجلّدًا ليس [[Python/packages|مجلّد حزمة]]، فإنّ جميع ملفات <code>‎*.pyc</code> ستضاف في المستوى العلوي، أما إن كان المجلّد [[Python/packages|مجلّد حزمة]]، فإنّ جميع ملفات ‎*.pyc ستضاف تحت اسم الحزمة كمسار للملف، وإن تضمّن المجلّد المعطى مجلّدات حزم فرعية، فإنّها ستضاف تعاوديًا وبحسب ترتيبها إلى الأرشيف.
===<code>basename</code>===
يستخدم هذا المعامل داخليًا فقط.
يستخدم هذا المعامل داخليًا فقط.
 
===<code>filterfunc</code>===
=== filterfunc ===
معامل اختياري، يجب أن يكون دالة ذات وسيط واحد وهو سلسلة نصية. سُتمرّر هذه الدالة إلى كل مسار في الأرشيف (ومن ضمنها جميع المسارات الكاملة المفردة للملفات) قبل إضافة هذه المسارات إلى الأرشيف.
معامل اختياري، يجب أن يكون دالة ذات وسيط واحد وهو سلسلة نصية. سُتمرّر هذه الدالة إلى كل مسار في الأرشيف (ومن ضمنها جميع المسارات الكاملة المفردة للملفات) قبل إضافة هذه المسارات إلى الأرشيف.


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


ملاحظات:
'''ملاحظات:'''
* أضيف المعامل filterfunc في الإصدار 3.4 من بايثون.
*أضيف المعامل <code>filterfunc</code> في الإصدار 3.4 من بايثون.
* أصبح بالإمكان استخدام كائنات شبيهة بالمسارات كقيمة للمعامل pathname في الإصدار 3.6 من بايثون.
*أصبح بالإمكان استخدام كائنات شبيهة بالمسارات كقيمة للمعامل <code>pathname</code> في الإصدار 3.6 من بايثون.
* تترتّب عناصر المجلّد عند إضافتها تعاوديًا في الإصدار 3.7 من بايثون.
*تترتّب عناصر المجلّد عند إضافتها تعاوديًا في الإصدار 3.7 من بايثون.
 
==أمثلة==
== أمثلة ==
إن كانت جميع ملفات الاختبارات موجودة في المجلد <code>test</code> أو تبدأ بالعبارة <code>‎test_‎</code> يمكن استخدام المعامل <code>filterfunct</code> لإقصائها:<syntaxhighlight lang="python3">
 
إن كانت جميع ملفات الاختبارات موجودة في المجلد test أو تبدأ بالعبارة ‎test_‎ يمكن استخدام المعامل filterfunct لإقصائها:
 
<syntaxhighlight lang="python3">
>>> zf = PyZipFile('myprog.zip')
>>> zf = PyZipFile('myprog.zip')
>>> def notests(s):
>>> def notests(s):
سطر 42: سطر 33:
...    return (not (fn == 'test' or fn.startswith('test_')))
...    return (not (fn == 'test' or fn.startswith('test_')))
>>> zf.writepy('myprog', filterfunc=notests)
>>> zf.writepy('myprog', filterfunc=notests)
</syntaxhighlight>
</syntaxhighlight>يُنشئ التابع <code>writepy()</code>‎ ملفات أرشيف تحمل أسماء مشابهة لما يلي:<syntaxhighlight lang="python3">
 
يصنع التابع writepy()‎ ملفات أرشيف تحمل أسماء مشابهة لما يلي:
 
<syntaxhighlight lang="python3">
string.pyc                  # اسم ملف في المستوى العلوي
string.pyc                  # اسم ملف في المستوى العلوي
test/__init__.pyc            # مجلّد حزمة
test/__init__.pyc            # مجلّد حزمة
سطر 53: سطر 40:
test/bogus/myfile.pyc        # test.bogus.myfile الوحدة الفرعية
test/bogus/myfile.pyc        # test.bogus.myfile الوحدة الفرعية
</syntaxhighlight>
</syntaxhighlight>
 
==مصادر==
== مصادر ==
* <span> </span>[https://docs.python.org/3/library/zipfile.html#zipfile.PyZipFile.writepy صفحة Work with ZIP archives في توثيق بايثون الرسمي.]
[https://docs.python.org/3/library/zipfile.html#zipfile.PyZipFile.writepy صفحة Work with ZIP archives في توثيق بايثون الرسمي.]
 
[[تصنيف:Python]]
[[تصنيف:Python]]
[[تصنيف:Python Modules]]
[[تصنيف:Python Modules]]
[[تصنيف:Python Methods]]
[[تصنيف:Python Methods]]

المراجعة الحالية بتاريخ 10:29، 16 نوفمبر 2018


يبحث التابع عن الملفات ذات الامتداد ‎*.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 الوحدة الفرعية

مصادر