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

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الوحدة <code>lzma</code> في بايثون}}</noinclude> تقدّم هذه الوحدة مجموعة من الأصناف والدوال...'
 
 
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الوحدة <code>lzma</code> في بايثون}}</noinclude>
<noinclude>{{DISPLAYTITLE:الوحدة <code>lzma</code> في بايثون}}</noinclude>


تقدّم هذه الوحدة مجموعة من الأصناف والدوال المساعدة لإجراء عمليات ضغط البيانات وفك الضغط عنها باستخدام خوارزمية الضغط LZMA. وتتضمّن هذه الوحدة كذلك واجهة للتعامل مع الملفات ذات الامتداد ‎.xz و ‎.lzma المستخدمة بواسطة الأداة xz، إضافة إلى التعامل مع البيانات المضغوطة الخام.
تقدّم هذه الوحدة مجموعة من الأصناف والدوال المساعدة لإجراء عمليات ضغط البيانات وفك الضغط عنها باستخدام خوارزمية الضغط LZMA. وتتضمّن هذه الوحدة كذلك واجهة للتعامل مع الملفات ذات الامتداد <code>‎.xz</code> و <code>‎.lzma</code> المستخدمة بواسطة الأداة xz، إضافة إلى التعامل مع البيانات المضغوطة الخام.


تقدّم هذه الوحدة واجهة مشابهة إلى حد كبير للواجهة المقدّمة في الوحدة bz2، ولكن يجب الانتباه إلى أنّ الصنف LZMAFile -وعلى عكس الصنف bz2.Bz2File- لا تتمتع بسلامة الخيوط not thread-safe؛ لذا إن احتجت إلى استخدام نسخة واحدة من الكائن LZMAFile من مصدر متعدد الخيوط، فيجب عليك حينئذٍ أن تحمي تلك النسخة بقفل.
تقدّم هذه الوحدة واجهة مشابهة إلى حد كبير للواجهة المقدّمة في [[Python/bz2|الوحدة <code>bz2</code>]]، ولكن يجب الانتباه إلى أنّ الصنف <code>[[Python/LZMAFile|LZMAFile]]</code> -وعلى عكس الصنف [[Python/BZ2File|<code>bz2.BZ2File</code>]]- لا تتمتع بسلامة الخيوط not thread-safe؛ لذا إن احتجت إلى استخدام نسخة واحدة من الكائن <code>[[Python/LZMAFile|LZMAFile]]</code> من مصدر متعدد الخيوط، فيجب عليك حينئذٍ أن تحمي تلك النسخة بقفل.


== استثناءات الوحدة ==
== استثناءات الوحدة ==


=== الاستثناء lzma.LZMAError ===
=== الاستثناء <code>lzma.LZMAError</code> ===


يُطلَق هذا الاستثناء عند حدوث أخطاء أثناء عمليات الضغط وفك الضغط، أو أثناء تهيئة حالة الضغط/فك الضغط.
يُطلَق هذا الاستثناء عند حدوث أخطاء أثناء عمليات الضغط وفك الضغط، أو أثناء تهيئة حالة الضغط أو فك الضغط.


== قراءة الملفات المضغوطة والكتابة فيها ==
== قراءة الملفات المضغوطة والكتابة فيها ==
سطر 16: سطر 16:
تفتح هذه الدالة ملفًّا مضغوطًا بخوارزمية LZMA في الوضع الثنائي أو النصي، وتعيد كائن ملف.
تفتح هذه الدالة ملفًّا مضغوطًا بخوارزمية LZMA في الوضع الثنائي أو النصي، وتعيد كائن ملف.


== ‎الصنف <code>[[Python/LZMAFile|LZMAFile]]</code> ==
=== ‎الصنف <code>[[Python/LZMAFile|LZMAFile]]</code> ===


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


يمكن لكائن LZMAFile أن يغلّف كائن ملف مفتوح فعلًا، أو أن يعمل مباشرة على الملف المعطى.  
يمكن لكائن <code>[[Python/LZMAFile|LZMAFile]]</code> أن يغلّف كائن ملف مفتوح فعلًا، أو أن يعمل مباشرة على الملف المعطى.  


== ضغط البيانات وفك الضغط عنها في الذاكرة ==
== ضغط البيانات وفك الضغط عنها في الذاكرة ==
يمكن استخدام الصنفين التاليين لضغط البيانات وفك الضغط عنها تزايديًا:


=== الصنف <code>[[Python/LZMACompressor|LZMACompressor]]</code> ===
=== الصنف <code>[[Python/LZMACompressor|LZMACompressor]]</code> ===
تنشئ هذه الدالة البانية كائن compressor جديد، ويمكن استخدام هذا الكائن لضغط البيانات تزايدياً. راجع توثيق الدالة compress()‎ لضغط البيانات دفعة واحدة.
تنشئ هذه الدالة البانية كائن compressor جديد، ويمكن استخدام هذا الكائن لضغط البيانات تزايدياً.


=== الصنف <code>[[Python/LZMADecompressor|LZMADecompressor]]</code> ===
=== الصنف <code>[[Python/LZMADecompressor|LZMADecompressor]]</code> ===
تنشئ هذه الدالة البانية كائن dcompressor يمكن استخدامه لفك الضغط عن البيانات تزايديًا. يمكن استخدام الدالة decompress()‎ لفك الضغط عن البيانات دفعة واحدة.
تنشئ هذه الدالة البانية كائن dcompressor يمكن استخدامه لفك الضغط عن البيانات تزايديًا.  
 
== ضغط البيانات وفك الضغط عنها دفعة واحدة ==
يمكن استخدام الدالتين التاليتين لضغط البيانات وفك الضغط عنها دفعة واحدة:


=== الدالة <code>[[Python/lzma/compress|lzma.compress()‎]]</code> ===
=== الدالة <code>[[Python/lzma/compress|lzma.compress()‎]]</code> ===
سطر 35: سطر 39:
=== الدالة <code>[[Python/lzma/decompress|lzma.decompress()‎]]</code> ===
=== الدالة <code>[[Python/lzma/decompress|lzma.decompress()‎]]</code> ===
تفكّ الدالة الضغط عن البيانات المعطاة.
تفكّ الدالة الضغط عن البيانات المعطاة.
== دوال متنوّعة ==
== دوال متنوّعة ==


سطر 45: سطر 47:
== تحديد سلاسل ترشيح مخصّصة ==
== تحديد سلاسل ترشيح مخصّصة ==


محدّد سلسلة الترشيح هو تسلسل من القواميس يتضمّن كل واحد منها معرّف مرشّح واحد والخيارات الخاصّة بذلك المرشح. يجب أن يتضمّن كل قاموس على مفتاح 'id' ويمكن أن يتضمّن مفاتيح إضافية لتحديد الخيارات الخاصّة بالمرشّح.  
محدّد سلسلة الترشيح هو تسلسل من [[Python/dict|القواميس]] يتضمّن كل واحد منها معرّف مرشّح واحد والخيارات الخاصّة بذلك المرشح. يجب أن يتضمّن كل [[Python/dict|قاموس]] على مفتاح <code>'id'</code> ويمكن أن يتضمّن مفاتيح إضافية لتحديد الخيارات الخاصّة بالمرشّح.  


يمكن استخدام معرّفات المرشّحات التالية:
يمكن استخدام معرّفات المرشّحات التالية:
* مرشحات الضغط:
** <code>FILTER_LZMA1</code> (يستخدم هذا المرشّح مع التنسيق <code>FORMAT_ALONE</code>).
** <code>FILTER_LZMA2</code> (يستخدم هذا المرشّح مع التنسيق <code>FORMAT_XZ</code> و <code>FORMAT_RAW</code>).


مرشحات الضغط:
* مرشحات <code>Delta</code>:  
FILTER_LZMA1 (يستخدم هذا المرشّح مع التنسيق FORMAT_ALONE).
** <code>FILTER_DELTA</code>
FILTER_LZMA2 (يستخدم هذا المرشّح مع التنسيق FORMAT_XZ و FORMAT_RAW).
 
مرشحات Delta:  
 
FILTER_DELTA
مرشّحات Branch-Call-Jump يرمز اختصارًا (BCJ):
 
FILTER_X86
FILTER_IA64
FILTER_ARM
FILTER_ARMTHUMB
FILTER_POWERPC
FILTER_SPARC


* مرشّحات Branch-Call-Jump يرمز اختصارًا (BCJ):
** <code>FILTER_X86</code>
** <code>FILTER_IA64</code>
** <code>FILTER_ARM</code>
** <code>FILTER_ARMTHUMB</code>
** <code>FILTER_POWERPC</code>
** <code>FILTER_SPARC</code>
يمكن لسلسلة الترشيح أن تتضمّن 4 مرشّحات كحدّ أقصى، ولا يمكن أن تكون فارغة، ويجب أن يكون آخر مرشّح في السلسلة مرشّح ضغط، ويجب أن تكون المرشّحات الأخرى من نوع delta أو BCJ.
يمكن لسلسلة الترشيح أن تتضمّن 4 مرشّحات كحدّ أقصى، ولا يمكن أن تكون فارغة، ويجب أن يكون آخر مرشّح في السلسلة مرشّح ضغط، ويجب أن تكون المرشّحات الأخرى من نوع delta أو BCJ.


تدعم مرشّحات الضغط الخيارات التالية (يمكن تحديدها كمدخلات إضافية في القاموس الذي يمثّل المرشّح):
تدعم مرشّحات الضغط الخيارات التالية (يمكن تحديدها كمدخلات إضافية في القاموس الذي يمثّل المرشّح):
* <code>preset</code>: إعدادات ضغط مسبقة يمكن استخدامها كمصدر للقيم الافتراضية في الخيارات التي لم تحدّد لها قيمة تصريحًا.
* <code>dict_size:</code> حجم القاموس بالبايتات. يجب أن تتدرّج القيمة بين ‎4 KiB‎ و ‎1.5 GiB‎ (ضمنيًا).
* <code>lc</code>: عدد بتات السياق الحرفية literal context bits.
* <code>lp</code>: عدد بتات الموقع الحرفية literal position bits. يجب أن لا يتجاوز مجموع قيمتي <code>lc</code> و l<code>p</code> العدد <code>4</code>.
* <code>pb</code>: عدد بتات الموقع، يجب أن لا يتجاوز العدد <code>4</code>.
* <code>mode</code>: إحدى القيمتين <code>MODE_FAST</code> أو <code>MODE_NORMAL</code>.
* <code>nice_len</code>: ما يجب أن يعدّ "طولًا مناسبًا" للتطابق. يجب أن يأخذ هذا الخيار القيمة <code>273</code> وما دونها.
* <code>mf</code>: الأداة المستخدمة للبحث عن التطابقات: <code>MF_HC3</code>، <code>MFHC4</code>، <code>MF_BT2</code>، <code>MF_BT3</code>، <code>MF_BT4</code>.
* <code>depth</code>: أقصى عمق للبحث المستخدم بواسطة الأداة التي تبحث عن التطابقات. <code>0</code> (القيمة الافتراضية) يعني أن يكون الاختيار تلقائيًا وذلك بالاستناد إلى خيارات المرشّح الأخرى.
يخزّن المرشح delta الفوارق بين البايتات، وينتج مدخلات أكثر تكرارية لعملية الضغط في بعض الحالات. يدعم هذا المرشّح خيارًا واحدًا وهو <code>dist</code>. ويشير هذا الخيار إلى المسافة بين البايتات التي ستطرح من بعضها البعض. القيمة الافتراضية هي <code>1</code> ويعني أنّ قياس الفارق سيكون بين البايتات المتجاورة.


preset: إعدادات ضغط مسبقة يمكن استخدامها كمصدر للقيم الافتراضية في الخيارات التي لم تحدّد لها قيمة تصريحًا.
أعدّت مرشّحات BCJ لتطبيقها في شيفرة الآلة، وتحوّل هذه المرشّحات التفرّعات النسبية وتستدعي وتتنقّل في الشيفرة لاستخدام طريقة الوصول المطلقة، وتهدف إلى زيادة التكرارات المستغلّة من قبل عملية الضغط. تدعم مرشّحات BCJ خيارًا واحدًا وهو <code>start_offset</code>. يحدّد هذا الخيار العنوان الذي يجب ربطه ببداية البيانات المدخلة، والقيمة الافتراضية له هي <code>0</code>.
dict_size: حجم القاموس بالبايتات. يجب أن تتدرّج القيمة بين ‎4 KiB‎ و ‎1.5 GiB‎ (ضمنيًا).
lc: عدد بتات السياق الحرفية literal context bits.
lp: عدد بتات الموقع الحرفية literal position bits. يجب أن لا يتجاوز مجموع قيمتي lc و lp العدد 4.
pb: عدد بتات الموقع، يجب أن لا يتجاوز العدد 4.
mode: إحدى القيمتين MODE_FAST أو MODE_NORMAL.
nice_len: ما يجب أن يعدّ "طولًا مناسبًا" للتطابق. يجب أن يأخذ هذا الخيار القيمة 273 وما دونها.
mf: الأداة المستخدمة للبحث عن التطابقات: MF_HC3، MFHC4، MF_BT2، MF_BT3، MF_BT4.
depth: أقصى عمق للبحث المستخدم بواسطة الأداة التي تبحث عن التطابقات. 0 (القيمة الافتراضية) يعني أن يكون الاختيار تلقائيًا وذلك بالاستناد إلى خيارات المرشّح الأخرى.
 
يخزّن المرشح delta الفوارق بين البايتات، وينتج مدخلات أكثر تكرارية لعملية الضغط في بعض الحالات. يدعم هذا المرشّح خيارًا واحدًا وهو dist. ويشير هذا الخيار إلى المسافة بين البايتات التي ستطرح من بعضها البعض. القيمة الافتراضية هي 1 ويعني أنّ قياس الفارق سيكون بين البايتات المتجاورة.
 
أعدّت مرشّحات BCJ لتطبيقها في شيفرة الآلة، وتحوّل هذه المرشّحات التفرّعات النسبية وتستدعي وتتنقّل في الشيفرة لاستخدام طريقة الوصول المطلقة، وتهدف إلى زيادة التكرارات المستغلّة من قبل عملية الضغط. تدعم مرشّحات BCJ خيارًا واحدًا وهو start_offset. يحدّد هذا الخيار العنوان الذي يجب ربطه ببداية البيانات المدخلة، والقيمة الافتراضية له هي 0.
 
 
== انظر أيضًا ==
== انظر أيضًا ==
* [[Python/gzip|الوحدة <code>gzip</code>]] في بايثون: تقدّم هذه الوحدة واجهة بسيطة لضغط الملفات وفك ضغطها بنفس الأسلوب المتّبع في برنامجي gzip و gunzip في GNU.
* [[Python/bz2|الوحدة <code>bz2</code>]]: تقدّم هذه الوحدة واجهة متكاملة لضغط البيانات وفك الضغط عنها باستخدام خوارزمية الضغط bzip2.


== مصادر ==
== مصادر ==

المراجعة الحالية بتاريخ 17:40، 12 نوفمبر 2018


تقدّم هذه الوحدة مجموعة من الأصناف والدوال المساعدة لإجراء عمليات ضغط البيانات وفك الضغط عنها باستخدام خوارزمية الضغط LZMA. وتتضمّن هذه الوحدة كذلك واجهة للتعامل مع الملفات ذات الامتداد ‎.xz و ‎.lzma المستخدمة بواسطة الأداة xz، إضافة إلى التعامل مع البيانات المضغوطة الخام.

تقدّم هذه الوحدة واجهة مشابهة إلى حد كبير للواجهة المقدّمة في الوحدة bz2، ولكن يجب الانتباه إلى أنّ الصنف LZMAFile -وعلى عكس الصنف bz2.BZ2File- لا تتمتع بسلامة الخيوط not thread-safe؛ لذا إن احتجت إلى استخدام نسخة واحدة من الكائن LZMAFile من مصدر متعدد الخيوط، فيجب عليك حينئذٍ أن تحمي تلك النسخة بقفل.

استثناءات الوحدة

الاستثناء lzma.LZMAError

يُطلَق هذا الاستثناء عند حدوث أخطاء أثناء عمليات الضغط وفك الضغط، أو أثناء تهيئة حالة الضغط أو فك الضغط.

قراءة الملفات المضغوطة والكتابة فيها

الدالة lzma.open()‎

تفتح هذه الدالة ملفًّا مضغوطًا بخوارزمية LZMA في الوضع الثنائي أو النصي، وتعيد كائن ملف.

‎الصنف LZMAFile

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

يمكن لكائن LZMAFile أن يغلّف كائن ملف مفتوح فعلًا، أو أن يعمل مباشرة على الملف المعطى.

ضغط البيانات وفك الضغط عنها في الذاكرة

يمكن استخدام الصنفين التاليين لضغط البيانات وفك الضغط عنها تزايديًا:

الصنف LZMACompressor

تنشئ هذه الدالة البانية كائن compressor جديد، ويمكن استخدام هذا الكائن لضغط البيانات تزايدياً.

الصنف LZMADecompressor

تنشئ هذه الدالة البانية كائن dcompressor يمكن استخدامه لفك الضغط عن البيانات تزايديًا.

ضغط البيانات وفك الضغط عنها دفعة واحدة

يمكن استخدام الدالتين التاليتين لضغط البيانات وفك الضغط عنها دفعة واحدة:

الدالة lzma.compress()‎

تضغط الدالة البيانات المعطاة.

الدالة lzma.decompress()‎

تفكّ الدالة الضغط عن البيانات المعطاة.

دوال متنوّعة

الدالة lzma.is_check_supported()‎

تتحقّق الدالة ممّا إذا كان اختبار السلامة مدعومًا من قبل نظام التشغيل.

تحديد سلاسل ترشيح مخصّصة

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

يمكن استخدام معرّفات المرشّحات التالية:

  • مرشحات الضغط:
    • FILTER_LZMA1 (يستخدم هذا المرشّح مع التنسيق FORMAT_ALONE).
    • FILTER_LZMA2 (يستخدم هذا المرشّح مع التنسيق FORMAT_XZ و FORMAT_RAW).
  • مرشحات Delta:
    • FILTER_DELTA
  • مرشّحات Branch-Call-Jump يرمز اختصارًا (BCJ):
    • FILTER_X86
    • FILTER_IA64
    • FILTER_ARM
    • FILTER_ARMTHUMB
    • FILTER_POWERPC
    • FILTER_SPARC

يمكن لسلسلة الترشيح أن تتضمّن 4 مرشّحات كحدّ أقصى، ولا يمكن أن تكون فارغة، ويجب أن يكون آخر مرشّح في السلسلة مرشّح ضغط، ويجب أن تكون المرشّحات الأخرى من نوع delta أو BCJ.

تدعم مرشّحات الضغط الخيارات التالية (يمكن تحديدها كمدخلات إضافية في القاموس الذي يمثّل المرشّح):

  • preset: إعدادات ضغط مسبقة يمكن استخدامها كمصدر للقيم الافتراضية في الخيارات التي لم تحدّد لها قيمة تصريحًا.
  • dict_size: حجم القاموس بالبايتات. يجب أن تتدرّج القيمة بين ‎4 KiB‎ و ‎1.5 GiB‎ (ضمنيًا).
  • lc: عدد بتات السياق الحرفية literal context bits.
  • lp: عدد بتات الموقع الحرفية literal position bits. يجب أن لا يتجاوز مجموع قيمتي lc و lp العدد 4.
  • pb: عدد بتات الموقع، يجب أن لا يتجاوز العدد 4.
  • mode: إحدى القيمتين MODE_FAST أو MODE_NORMAL.
  • nice_len: ما يجب أن يعدّ "طولًا مناسبًا" للتطابق. يجب أن يأخذ هذا الخيار القيمة 273 وما دونها.
  • mf: الأداة المستخدمة للبحث عن التطابقات: MF_HC3، MFHC4، MF_BT2، MF_BT3، MF_BT4.
  • depth: أقصى عمق للبحث المستخدم بواسطة الأداة التي تبحث عن التطابقات. 0 (القيمة الافتراضية) يعني أن يكون الاختيار تلقائيًا وذلك بالاستناد إلى خيارات المرشّح الأخرى.

يخزّن المرشح delta الفوارق بين البايتات، وينتج مدخلات أكثر تكرارية لعملية الضغط في بعض الحالات. يدعم هذا المرشّح خيارًا واحدًا وهو dist. ويشير هذا الخيار إلى المسافة بين البايتات التي ستطرح من بعضها البعض. القيمة الافتراضية هي 1 ويعني أنّ قياس الفارق سيكون بين البايتات المتجاورة.

أعدّت مرشّحات BCJ لتطبيقها في شيفرة الآلة، وتحوّل هذه المرشّحات التفرّعات النسبية وتستدعي وتتنقّل في الشيفرة لاستخدام طريقة الوصول المطلقة، وتهدف إلى زيادة التكرارات المستغلّة من قبل عملية الضغط. تدعم مرشّحات BCJ خيارًا واحدًا وهو start_offset. يحدّد هذا الخيار العنوان الذي يجب ربطه ببداية البيانات المدخلة، والقيمة الافتراضية له هي 0.

انظر أيضًا

  • الوحدة bz2: تقدّم هذه الوحدة واجهة متكاملة لضغط البيانات وفك الضغط عنها باستخدام خوارزمية الضغط bzip2.

مصادر