קורס פיתוח מתקדם בפייתון
פרק
>
רמה

מודולי סיריאליזציה
מודולי דחיסה

מטרה

קבל הודעות והוראות ודחוס אותן לארכיון ולהעברה.

יש מספר הוראות בנייה, משלוחים ומניפסטים שהוגשו וצריך להעבירם או לאחסנם בארכיון. אמנם ניתן לשלוח ידנית את הכל, אך דרך טובה היא לדחוס ולפרוק קבצים ואז לאחסן או לשלוח אותם. כדי לעשות זאת, ניתן להשתמש במודולים לדחיסה כדי להקטין את גודל הקבצים ולהפוך את המידע לנוח יותר לניהול. בניגוד לבעיות קודמות בהן השתמשנו רק במודול אחד, כאן יש מספר מודולי דחיסה שניתן לעבוד איתם עם מבחר קטן של פונקציות. הם כדלקמן:

עבור מהירות דחיסה גבוהה ויחס דחיסה נמוך, השתמש במודול zlib על-ידי הוספת import zlib. לצרכים שלנו נשתמש בפונקציה הבאה: zlib.compress(), המקבלת ארגומנט אחד - המידע שברצונך לדחוס. יש להזין את הארגומנט בבייטים במקום במחרוזת.

עבור מהירות דחיסה בינונית ויחס דחיסה בינוני, השתמש במודול bz2 על-ידי הוספת import bz2. לצרכים שלנו נשתמש בפונקציות הבאות:

  • bz2.compress(), מקבלת ארגומנט אחד - המידע שברצונך לדחוס.
  • bz2.decompress(), מקבלת ארגומנט אחד - המידע שברצונך לפרוק. יש להזין אותו בבייטים במקום במחרוזת.

יש להזין את הארגומנטים בבייטים במקום במחרוזת.

עבור יחס דחיסה גבוה אך מהירות דחיסה נמוכה, השתמש במודול lzma על-ידי הוספת import lzma. לצרכים שלנו נשתמש במחלקות ובפונקציות הבאות:

  • lzma.LZMACompressor(): מחלקה ליצירת אובייקטי דחיסה המאפשרים להפעיל דוחס.
  • compress(): מקבלת ארגומנט אחד - המידע שברצונך לדחוס. יש להזינו בבייטים במקום במחרוזת.

בנוסף למודולים אלה, נשתמש בפונקציה 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 כארגומנט. זאת תאפשר לך לדחוס את הנתונים באמצעות אובייקט הדחיסה. הוסף את המשתנים green_message ו־green_compression לפונקציה המוכנה display() כדי לצפות בהודעה ובנתוני הדחיסה.

לך לסימן ה־X הבהיר שמעל השטיח הירוק ופנה אל השולחן, ושנה את שני המשתנים message_length ו־compression_length. במשתנים אלה נשמור את אורך התווים של הנתונים לפני ואחרי הדחיסה באמצעות הפונקציה len(). עבור message_length קבל את האורך של green_message כך: message_length = len(green_message). עבור compression_length עשה את אותו הדבר על־ידי אחסון len(green_compression). ברגע ששני המשתנים מלאים, השתמש בפונקציה המוכנה write() והעבר לה את message_length ו־compression_length כארגומנטים כדי לאמת את גדלי הדחיסה ולסיים את הרמה.

ספר קוד