gzip --- ضغط وفك ضغط gzip

تتيح هذه الوحدة ضغط وفك ضغط البيانات الثنائية باستخدام خوارزمية DEFLATE المستخدمة في تنسيق ملفات gzip. وهي توفر دوال مساعدة أحادية الطلقة compress()/decompress() وغلافاً متدفقاً GzipFile حول ملف أساسي أو كائن تدفق.

ملاحظة

يُفضّل استخدام deflate.DeflateIO بدلاً من الدوال في هذه الوحدة لأنها توفر واجهة متدفقة للضغط وفك الضغط تكون مريحة وأكثر كفاءة في استخدام الذاكرة عند العمل على قراءة أو كتابة بيانات مضغوطة إلى ملف أو مقبس أو تدفق.

التوافر:

  • هذه الوحدة غير مضمّنة في OpenMV Cam افتراضياً، لأنها تكرّر وظائف موفّرة مسبقاً من الوحدة deflate.

  • يمكن تثبيت نسخة (أو تجميدها في برنامج ثابت مخصص) من micropython-lib (المصدر). انظر إدارة الحزم لمزيد من المعلومات. تصف هذه الوثائق تلك الوحدة.

  • يتوفر الضغط فقط إذا كان الضغط متاحاً في الوحدة المدمجة deflate -- أي، ليس على كاميرات OpenMV Cam المبنية على STM32 (انظر ملاحظة توافرها أعلاه).

الدوال

gzip.open(filename: str, mode: str, /) GzipFile

غلاف حول الدالة المدمجة open() يُرجع نسخة GzipFile.

gzip.decompress(data: bytes, /) bytes

فك ضغط data إلى كائن بايتات.

gzip.compress(data: bytes, /) bytes

ضغط data إلى كائن بايتات.

الفئات

class gzip.GzipFile(*, fileobj, mode: str)

يمكن استخدام هذه الفئة لتغليف fileobj وهو أي كائن شبيه بالتدفق مثل ملف أو مقبس أو تدفق (بما في ذلك io.BytesIO). وهي بحد ذاتها تدفق وتنفّذ طرق read/readinto/write/close القياسية.

عندما تكون وسيطة mode هي "rb"، فإن عمليات القراءة من نسخة GzipFile ستفك ضغط البيانات في التدفق الأساسي وتُرجع البيانات المفكوك ضغطها.

إذا كان دعم الضغط مفعّلاً فيمكن ضبط وسيطة mode على "wb"، وستُضغط عمليات الكتابة إلى نسخة GzipFile وتُكتب إلى التدفق الأساسي.

افتراضياً ستقرأ فئة GzipFile وتكتب البيانات باستخدام تنسيق ملفات gzip، بما في ذلك ترويسة وتذييل مع مجموع تحقّق وحجم نافذة يبلغ 512 بايت.

وسائط file و compresslevel و mtime غير مدعومة. يجب دائماً تحديد fileobj و mode كوسائط مفتاحية.

أمثلة

حالة استخدام نموذجية لـ gzip.GzipFile هي قراءة أو كتابة ملف مضغوط من وحدة التخزين:

import gzip

# Reading:
with open("data.gz", "rb") as f:
    with gzip.GzipFile(fileobj=f, mode="rb") as g:
        # Use g.read(), g.readinto(), etc.

 # Same, but using gzip.open:
with gzip.open("data.gz", "rb") as f:
     # Use f.read(), f.readinto(), etc.

# Writing:
with open("data.gz", "wb") as f:
    with gzip.GzipFile(fileobj=f, mode="wb") as g:
        # Use g.write(...) etc

# Same, but using gzip.open:
with gzip.open("data.gz", "wb") as f:
    # Use f.write(...) etc

# Write a dictionary as JSON in gzip format, with a
# small (64 byte) window size.
config = { ... }
with gzip.open("config.gz", "wb") as f:
    json.dump(config, f)

للحصول على إرشادات حول العمل مع مصادر gzip واختيار حجم النافذة، انظر الملاحظة في نهاية وثائق deflate.