Coding for KidsCoding for Kids
المستويات الإبداعيةالتحدياتدليل المعلم
صوت للميزات
دورة تطوير بايثون المتقدمة
الفصل
>
المستوى

وحدات التسلسل
وحدات الضغط

الهدف

خذ الرسائل والأوامر واضغطها من أجل الأرشفة والنقل.

هناك عدة تعليمات بناء، وشحنات، وقوائم شحن تم تقديمها وتحتاج إلى نقلها أو أرشفتها. وبينما يمكن إرسال كل هذه البيانات يدويًا، فإن الطريقة الجيدة للقيام بذلك هي عن طريق ضغط وفك ضغط الملفات ثم تخزينها أو إرسالها. للقيام بذلك، يمكنك استخدام وحدات الضغط لتقليل حجم الملفات وجعل إدارة المعلومات أسهل. وعلى عكس المشاكل الأخرى التي حللناها حيث تعلمنا واستخدمنا وحدة واحدة، هناك عدة وحدات لضغط البيانات يمكننا استخدامها مع مجموعة صغيرة من الوظائف. وهي كالتالي:

بالنسبة لسرعة ضغط عالية وضغط منخفض، استخدم وحدة zlib، عن طريق إضافة import zlib. لأغراضنا سنستخدم الوظيفة التالية: zlib.compress()، التي تستخدم وسيطًا واحدًا، وهو المعلومات التي ترغب في ضغطها. يجب إدخال الوسيط على شكل بايتات بدلاً من سلسلة نصية.

بالنسبة لسرعة ضغط متوسطة وضغط متوسط، استخدم وحدة bz2، عن طريق إضافة import bz2. لأغراضنا سنستخدم الوظائف التالية:

  • bz2.compress()، تستخدم وسيطًا واحدًا، وهو المعلومات التي ترغب في ضغطها.
  • bz2.decompress()، تستخدم وسيطًا واحدًا، وهو المعلومات التي ترغب في ضغطها. يجب إدخاله على شكل بايتات بدلاً من سلسلة نصية.

تحتاج الوسائط إلى إدخالها على شكل بايتات بدلاً من سلسلة نصية.

بالنسبة لضغط عالي ولكن بسرعة ضغط بطيئة، استخدم وحدة lzma، عن طريق إضافة import lzma. لأغراضنا سنستخدم الفئات والوظائف التالية:

  • lzma.LZMACompressor() : فئة تُستخدم لإنشاء كائنات ضغط تتيح لك تفعيل ضاغط.
  • compress(): تستخدم وسيطًا واحدًا، وهو المعلومات التي ترغب في ضغطها. يجب إدخاله على شكل بايتات بدلاً من سلسلة نصية. يجب إدخال الوسيط على شكل بايتات بدلاً من سلسلة نصية.

بالإضافة إلى هذه الوحدات، سنستخدم الدالة bytes()، التي تتيح لك تحويل السلاسل النصية إلى بايتات، مما سيكون مفيدًا في عملية الضغط. تأخذ دالة bytes() وسيطين، السلسلة النصية التي ترغب في تحويلها والصيغة، والتي لأغراضنا هي 'utf-8'.

هناك ثلاثة ثوابت تحتوي على بيانات تحتاج إلى ضغط، وهي تحمل الأسماء red_message، blue_message وgreen_message. للبدء، توجه إلى العلامة الذهبية على شكل X فوق السجادة الحمراء، وأنشئ متغيرًا باسم red_bytes. خذ الثابت red_message وحول الرسالة إلى بايتات حتى يمكن ضغط البيانات، باستخدام الدالة bytes() مع تنسيق 'utf-8'، كما يلي: red_bytes = bytes(red_message, 'utf-8').

أنشئ متغيرًا باسم red_compression وخزن فيه قيمة zlib.compress(). استخدم red_bytes كوسيط لضغط البيانات، كما يلي: red_compression = zlib.compress(red_bytes). بمجرد ضغط البيانات، استخدم الدالة المعدة مسبقًا display() في محرر الشيفرة وأضف المتغيرات red_message وred_compression كوسائط لقراءة الرسالة وعرض بيانات الضغط.

توجه إلى العلامة الفاتحة على شكل X فوق السجادة الحمراء وواجه المكتب، وأنشئ متغيرين باسم: message_length وcompression_length. في هذه المتغيرات سنخزن طول الأحرف للبيانات قبل وبعد الضغط باستخدام دالة len(). على سبيل المثال، للحصول على message_length، احصل على طول red_message، كما يلي: message_length = len(red_message). قم بالمثل مع compression_length عن طريق تخزين قيمة len(red_compression).

بمجرد تعبئة كلا المتغيرين، استخدم الدالة المعدة مسبقًا write() وأدخل المتغيرات message_length وcompression_length كوسائط للتحقق من أحجام الضغط. هذا يوضح مقدار ضغط الملف مقارنةً بالحالة غير المضغوطة.

توجه إلى العلامة الداكنة على شكل X فوق السجادة الزرقاء وواجه الكمبيوتر. أنشئ متغيرًا باسم blue_bytes وحول blue_message إلى بايتات باستخدام الدالة bytes() بنفس الطريقة التي فعلتها مع red_message. خذ الثابت blue_message واضغطه عن طريق تخزين قيمة bz2.compress() مع إدخال blue_bytes كوسيط لضغط البيانات، كما يلي: blue_message = bz2.compress(blue_bytes).

أنشئ متغيرًا باسم blue_decompress وخزن فيه قيمة bz2.decompress()، وأضف blue_message كوسيط لعرض البيانات بعد فك الضغط. أضف المتغيرين blue_message وblue _decompress إلى الدالة المعدة مسبقًا display() لعرض النسخ المضغوطة وغير المضغوطة من بيانات الرسالة.

توجه إلى العلامة الداكنة على شكل X فوق السجادة الخضراء وأنشئ كائنًا باسم compressor وقم بتعبئته بـ lzma.LZMACompressor()، مما سيُنشئ كائن ضغط يمكن استخدامه مع دوال lzma. أنشئ متغيرًا باسم green_bytes وحول green_message إلى صيغة البايتات باستخدام الدالة bytes() بنفس الطريقة التي فعلتها مع red_message وblue_message.

أنشئ متغيرًا باسم green_compression وخزن فيه قيمة compressor.compress() مع إدخال green_bytes كوسيط. سيسمح هذا بضغط بيانات الرسالة باستخدام كائن الضغط. في الدالة المعدة مسبقًا display()، أضف المتغيرين green_message وgreen_compression كوسائط لعرض الرسالة والبيانات المضغوطة.

توجه إلى العلامة الفاتحة على شكل X فوق السجادة الخضراء وواجه المكتب، وعدل المتغيرين المسمى: message_length وcompression_length. في هذه المتغيرات سنخزن طول الأحرف للبيانات قبل وبعد الضغط باستخدام دالة len(). للحصول على message_length، احصل على طول green_message باستخدام len(). وافعل الشيء نفسه مع compression_length بتخزين قيمة len(green_compression). بمجرد تعبئة كلا المتغيرين، استخدم الدالة المعدة مسبقًا write() وأدخل message_length وcompression_length كوسائط للتحقق من أحجام الضغط وإنهاء المستوى.

كتاب الكود