Pokročilý kurz vývoje v Pythonu
Kapitola
>
Úroveň
Serializační moduly
Moduly komprese
Cíl
Vezměte zprávy a příkazy a zkomprimujte je pro archivaci a přenos.
Bylo předloženo několik konstrukčních pokynů, dodávek a manifestů, které je třeba převést nebo archivovat. Ačkoli je lze odeslat ručním procesem, dobrým způsobem, jak toho dosáhnout, je komprimace a dekomprimace souborů a následné uložení nebo odeslání. K tomu můžete využít moduly pro kompresi, které snižují velikost souborů a zjednodušují správu informací. Na rozdíl od jiných úloh, kdy jsme se naučili a použili jeden modul, existuje několik kompresních modulů, které můžeme použít s malým výběrem funkcí. Jsou následující:
Pro rychlou rychlost komprese a nízkou kompresi použijte modul zlib přidáním import zlib. Pro naše účely budeme používat následující funkci: zlib.compress(), která používá jeden argument, jímž jsou informace, jež chcete zkomprimovat. Argument musí být zadán jako bity místo řetězce.
Pro střední rychlost i míru komprese použijte modul bz2 přidáním import bz2. Pro naše účely budeme používat následující funkce:
bz2.compress(), používá jeden argument, jímž jsou informace, jež chcete zkomprimovat.bz2.decompress(), používá jeden argument, jímž jsou informace, které chcete dekomprimovat. Musí být zadány jako bity místo řetězce.
Argumenty musí být zadány jako bity místo řetězce.
Pro vysokou kompresi, avšak pomalou rychlost komprese, použijte modul lzma přidáním import lzma. Pro naše účely budeme používat následující třídy a funkce:
lzma.LZMACompressor(): Třída používaná pro vytvoření kompresních objektů, která umožňuje aktivaci kompresoru.compress(): Používá jeden argument, jímž jsou informace, jež chcete zkomprimovat. Musí být zadány jako bity místo řetězce. Argument musí být zadán jako bity místo řetězce.
Kromě těchto modulů budeme používat funkci bytes(), která vám umožní převést řetězce na bity, což se hodí pro kompresi. Funkce přijímá dva argumenty – řetězec, který chcete převést, a formát, pro naše účely 'utf-8'.
Existují tři konstanty obsahující data, která je třeba zkomprimovat, a jmenují se red_message, blue_message a green_message. Začněte tak, že půjdete k zlaté značce X přes červený koberec, vytvořte proměnnou s názvem red_bytes. Vezměte konstantu red_message a převedete zprávu na bity, aby bylo možné data zkomprimovat, použitím funkce bytes() s formátováním na 'utf-8', například takto: red_bytes = bytes(red_message, 'utf-8').
Vytvořte proměnnou s názvem red_compression a uložte do ní hodnotu z funkce zlib.compress(). Použijte red_bytes jako argument, který zkomprimuje data, například takto: red_compression = zlib.compress(red_bytes). Jakmile budou data zkomprimována, použijte předem připravenou funkci display() v editoru kódu a předejte jí proměnné red_message a red_compression jako argumenty, abyste mohli zprávu přečíst a zobrazit kompresní data.
Přejděte k světlé značce X přes červený koberec a postavte se k pracovnímu stolu, vytvořte dvě proměnné s názvy: message_length a compression_length. V těchto proměnných budeme ukládat počet znaků dat před a po kompresi pomocí funkce len(). Například u message_length získejte délku red_message, například takto: message_length = len(red_message). Udělejte to samé pro compression_length tak, že uložíte len() hodnotu z red_compression.
Jakmile budou obě proměnné naplněny, použijte předem připravenou funkci write() a zadejte message_length a compression_length jako argumenty, abyste ověřili velikost komprese. To ukazuje, o kolik se soubor zmenšil ve srovnání s původní nekomprimovanou verzí.
Přejděte ke tmavé značce X přes modrý koberec, postavte se k počítači. Vytvořte proměnnou s názvem blue_bytes a převedete blue_message na bity pomocí funkce bytes() stejným způsobem, jak jste to udělali s red_message. Vezměte konstantu blue_message a zkomprimujte ji uložením hodnoty z funkce bz2.compress() a použitím blue_bytes jako argumentu pro kompresi dat, například takto: blue_message = bz2.compress(blue_bytes).
Vytvořte proměnnou s názvem blue_decompress a uložte do ní hodnotu z funkce bz2.decompress() a předejte blue_message jako argument, abyste mohli zobrazit data po dekompresi. Přidejte proměnné blue_message a blue_decompress do předem připravené funkce display(), abyste mohli zobrazit komprimovanou i dekomprimovanou variantu zprávy.
Přejděte ke tmavé značce X přes zelený koberec a vytvořte objekt s názvem compressor a naplňte jej funkcí lzma.LZMACompressor(), což vytvoří kompresní objekt, který lze použít s funkcemi lzma. Vytvořte proměnnou s názvem green_bytes a převeďte green_message do bitového formátu pomocí funkce bytes() stejným způsobem, jak jste to udělali s red_message a blue_message.
Vytvořte proměnnou s názvem green_compression a uložte do ní hodnotu compressor.compress() s přidáním proměnné green_bytes jako argument. Tímto způsobem můžete zkomprimovat datovou zprávu pomocí kompresního objektu. Do předem připravené funkce display() přidejte proměnné green_message a green_compression jako argumenty, abyste mohli zobrazit zprávu a komprimovaná data.
Přejděte ke světlé značce X přes zelený koberec a postavte se k pracovnímu stolu, upravte dvě proměnné s názvy: message_length a compression_length. V těchto proměnných budeme ukládat počet znaků dat před a po kompresi pomocí funkce len(). U message_length získejte délku green_message pomocí len(). Udělejte to samé u compression_length tím, že uložíte hodnotu funkce len() z green_compression. Jakmile budou obě proměnné naplněny, použijte předem připravenou funkci write() a zadejte message_length a compression_length jako argumenty, abyste ověřili velikost komprese a úroveň dokončili.