Coding for KidsCoding for Kids
Kreatív SzintekKihívásokTanári Útmutató
Szavazzon a funkciókra
Fejlett Python fejlesztési tanfolyam
Fejezet
>
Szint

Szerializációs modulok
Tömörítési modulok

Célkitűzés

Vedd az üzeneteket és megrendeléseket, majd tömörítsd őket archiválásra és átvitelhez.

Számos építési utasítást, szállítmányt és fuvarlevelet nyújtottak be, amelyeket át kell vinni vagy archiválni kell. Bár ezeket manuálisan is elküldhetjük, egy jó módszer az, ha tömörítjük, majd kitömörítjük a fájlokat, aztán tároljuk vagy elküldjük őket. Ehhez használhatunk tömörítési modulokat a fájlméretek csökkentésére, és így az információ kezelhetőbbé válik. Más által megoldott feladatainktól eltérően, ahol egyetlen modult tanultunk és használtunk, itt több tömörítési modul közül választhatunk, néhány függvénykészlettel. Ezek a következők:

Gyors tömörítési sebesség és alacsony tömörítés esetén használd a zlib modult, melynek hozzáadásával import zlib parancsot kell használni. Szándékaink szerint az alábbi függvényt fogjuk használni: zlib.compress(), amely egy argumentumot vesz fel, ami az a információ, amit tömöríteni szeretnél. Az argumentumot bájtokként kell megadni, nem karakterláncként.

Közepes tömörítési sebesség és közepes tömörítés esetén használd a bz2 modult, hozzáadva import bz2 parancsot. Szándékaink szerint az alábbi függvényeket fogjuk használni:

  • bz2.compress(), egy argumentumot használ, ami az a információ, amit tömöríteni szeretnél.
  • bz2.decompress(), egy argumentumot használ, ami az a információ, amit tömöríteni szeretnél. Ezt bájtokban kell megadni, nem karakterláncként.

Az argumentumokat bájtokban kell megadni, nem pedig karakterláncként.

Magas tömörítés, de alacsony tömörítési sebesség esetén használd az lzma modult, hozzáadva import lzma parancsot. Szándékaink szerint az alábbi osztályokat és függvényeket fogjuk használni:

  • lzma.LZMACompressor(): Osztály, amely tömörítő objektumokat hoz létre, lehetővé téve egy tömörítő aktiválását.
  • compress(): Egy argumentumot használ, ami az a információ, amit tömöríteni szeretnél. Ezt bájtokban kell megadni, nem karakterláncként.

Ezen modulokon kívül használni fogjuk a bytes() függvényt is, mely lehetővé teszi, hogy karakterláncokat bájtokká alakítsunk, ami hasznos lesz a tömörítéshez. Két argumentumot vár: a konvertálni kívánt karakterláncot és a formátumot, amely esetünkben 'utf-8'.

Három állandó van, melyek tömörítendő adatokat tartalmaznak, ezek neve: red_message, blue_message és green_message.

Kezdésként sétálj az arany X jelzéshez a piros szőnyegen, és hozz létre egy red_bytes nevű változót. Vedd a red_message állandót, és alakítsd át az üzenetet bájtokká a bytes() függvény segítségével, 'utf-8' formátumban, így: red_bytes = bytes(red_message, 'utf-8').

Hozz létre egy red_compression nevű változót, és tárold benne a zlib.compress() értékét. Használd a red_bytes változót argumentumként, amely tömöríti az adatot, így: red_compression = zlib.compress(red_bytes). Miután az adat tömörítve lett, használd az előre megírt display() függvényt a kódszerkesztőben, és add meg a red_message valamint red_compression változókat argumentumként, hogy elolvasd az üzenetet és megtekintsd a tömörítési adatokat.

Sétálj a világos X jelzéshez a piros szőnyegen, és fordulj az asztal felé, majd hozz létre két változót: message_length és compression_length. Ezekben a változókban az adat karakterhosszát fogjuk tárolni, mind a tömörítés előtt, mind utána, a len() függvény segítségével. Például a message_length esetében vedd meg a red_message hosszát, így: message_length = len(red_message). Ugyanezt tedd a compression_length esetében, tárolva a len(red_compression) értékét.

Miután mindkét változó értékkel rendelkezik, használd az előre megírt write() függvényt, és add meg a message_length valamint compression_length változókat argumentumként, hogy ellenőrizd a tömörítési méreteket. Ez bemutatja, mennyire tömörül az állomány a tömörítetlen állapothoz képest.

Sétálj a sötét X jelzéshez a kék szőnyegen, és fordulj a számítógép felé. Hozz létre egy blue_bytes nevű változót, és alakítsd át a blue_message értéket bájtokká a bytes() függvény segítségével, ugyanúgy, mint ahogy a red_message esetében tetted.

Vedd a blue_message állandót, és tömörítsd azt úgy, hogy tárolod a bz2.compress() értékét, argumentumként megadva a blue_bytes változót, így: blue_message = bz2.compress(blue_bytes).

Hozz létre egy blue_decompress nevű változót, és tárold benne a bz2.decompress() értékét, majd add hozzá argumentumként a blue_message változót, hogy megtekinthesd az adatot a kitömörítés után. Add hozzá a blue_message és blue_decompress változókat az előre megírt display() függvényhez, hogy megtekintsd az üzenet tömörített és visszafejtett változatait.

Haladj a sötét X jelzés felé a zöld szőnyegen, és hozz létre egy compressor nevű objektumot, melyet tölts fel a lzma.LZMACompressor() értékkel. Ez létrehoz egy tömörítő objektumot, amelyet az lzma függvényekkel lehet használni. Hozz létre egy green_bytes nevű változót, és alakítsd át a green_message értékét bájtokká a bytes() függvény segítségével, ugyanúgy, mint ahogy a red_message és a blue_message esetében tetted.

Hozz létre egy green_compression nevű változót, és tárold benne a compressor.compress() értékét, argumentumként megadva a green_bytes változót. Ez lehetővé teszi, hogy a tömörítő objektummal tömörítsd az üzenet adatot. Az előre megírt display() függvényben add meg a green_message és a green_compression változókat argumentumként, hogy megtekintsd az üzenetet és a tömörített adatokat.

Sétálj a világos X jelzéshez a zöld szőnyegen, és fordulj az asztal felé, majd módosítsd a két változót: message_length és compression_length. Ezekben a változókban az adat karakterhosszát fogjuk tárolni, mind a tömörítés előtt, mind utána, a len() függvény segítségével. A message_length esetében vedd meg a green_message hosszát a len() függvénnyel. Ugyanezt tedd a compression_length esetében, tárolva a len(green_compression) értékét. Miután mindkét változó értékkel rendelkezik, használd az előre megírt write() függvényt, és add meg a message_length valamint a compression_length változókat argumentumként, hogy ellenőrizd a tömörítési méreteket, ezzel befejezve a szintet.

Kódkönyv