الوحدة lzma في بايثون

من موسوعة حسوب
اذهب إلى: تصفح، ابحث


تقدّم هذه الوحدة مجموعة من الأصناف والدوال المساعدة لإجراء عمليات ضغط البيانات وفك الضغط عنها باستخدام خوارزمية الضغط 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.

مصادر