تقنية

gzip في بايثون: ماذا يعيد فك عضوين متتابعين؟

مخرج العضوين
a وb: عضوان مضغوطان منفصلان. [1] [2]

gzip.decompress يدعم أعضاء متتابعين؛ العضو هنا كتلة مضغوطة كاملة. [1] [2]

الخلاصة السريعة

فك العضوين الكاملين يجمع محتواهما. [1] [2]

  • ضغطنا A وB منفصلين؛ فك a+b أعاد b'AB'. [1] [2]
  • عكس الترتيب أعاد b'BA'. [1] [2]
  • الناتج bytes واحد، دون فاصل مضاف. [1] [2]
  • تغيير بايت في قيمة CRC للعضو الثاني رفع BadGzipFile في اختبارنا. [1] [2]
  • اختبرنا 3.12.14؛ بايتات كاملة في الذاكرة، دون ملفات. لا نفترض ثبات الافتراضيات من وثائق 3.15. [1] [2]

المثال

import gzip as g
a=g.compress(b'A',mtime=0)
b=g.compress(b'B',mtime=0)
print(g.decompress(a))
print(g.decompress(a+b))

[1] [2]

الناتج: b'A' ثم b'AB'. [1] [2]

الترتيب والمخرج

الترتيب محفوظ: b+a يعيد b'BA'. لا تعيد الدالة قائمة بكل عضو، ولا تضيف مسافة بينهما. [1] [2]

تبديل الترتيب
الفك لا يضيف فاصلًا. [1] [2]

حد المثال

غيّرنا بايتًا من CRC، وهو فحص لكشف تغير البيانات، في نهاية العضو الثاني. رفعت الدالة الاستثناء؛ لم تُرجع محتوى الأول وحده. لا نفترض نجاح الفك لبيانات تالفة. [1] [2]

وثائق 3.15 تختلف عن المفسر المختبر؛ لا نفترض ثبات إعدادات الضغط الافتراضية. [1] [2]

المراجع

  1. Python: gzip
  2. CPython 3.12.14: gzip.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

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