上級Python開発コース
チャプター
>
レベル
シリアライゼーション・モジュール
圧縮モジュール
Objective
メッセージや命令を取り、アーカイブと送信のために圧縮します。
いくつかの建設指示、出荷物、マニフェストが提出され、転送またはアーカイブする必要があります。これらはすべて手動で送信することもできますが、圧縮と解凍を行ってから保存または送信する方法も良い方法です。これを行うために、ファイルサイズを縮小し、情報の管理を容易にするための圧縮モジュールを使用できます。他の問題で一つのモジュールを学び使用したのとは異なり、使用できる圧縮モジュールはいくつかあり、少数の関数が選択可能です。以下の通りです:
高速な圧縮速度と低い圧縮率の場合は、zlib モジュールを使用します。import zlib を追加してください。我々の目的では、次の関数を使用します: zlib.compress() 。これは一つの引数、圧縮したい情報を使用します。引数は文字列ではなくバイトとして入力する必要があります。
中程度の圧縮速度と中程度の圧縮率の場合は、bz2 モジュールを使用します。import bz2 を追加してください。我々の目的では、次の関数を使用します:
bz2.compress():圧縮したい情報を引数として一つ使用します。bz2.decompress():圧縮した情報を引数として一つ使用します。これもバイトとして入力する必要があります。
引数は文字列ではなくバイトとして入力する必要があります。
高い圧縮率だが圧縮速度が遅い場合は、lzma モジュールを使用します。import lzma を追加してください。我々の目的では、次のクラスと関数を使用します:
lzma.LZMACompressor():圧縮オブジェクトを作成するためのクラスで、これによりコンプレッサをアクティベートできます。compress():圧縮したい情報を引数として一つ使用します。これもバイトとして入力する必要があります。
これらのモジュールに加え、bytes() 関数を使用して文字列をバイトに変換することができます。これは圧縮に役立ちます。2つの引数、変換したい文字列と形式(我々の場合は 'utf-8')を取ります。
圧縮する必要があるデータを含む3つの定数があり、それらは 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 という2つの変数を作成してください。これらの変数には、len() 関数を使用して圧縮前と圧縮後のデータの文字数を格納します。例えば、message_length には red_message の長さを取得します。例: message_length = len(red_message) 。同様に、compression_length には red_compression の len() を格納してください。
両方の変数に値が入ったら、用意された write() 関数を使用し、引数として message_length と compression_length を挿入して、圧縮サイズを確認します。これにより、非圧縮時と比較してファイルがどれだけ圧縮されたかを示します。
青いカーペットの上にある暗い X マークまで歩き、コンピュータに向かってください。blue_bytes という変数を作成し、blue_message を red_message と同じ方法で bytes() 関数を使用してバイトに変換してください。blue_message 定数を取り、bz2.compress() の値を格納し、引数として blue_bytes を追加してデータを圧縮します。例: blue_message = bz2.compress(blue_bytes) 。
blue_decompress という変数を作成し、bz2.decompress() の値を格納します。引数として blue_message を渡し、解凍後のデータを確認してください。用意された display() 関数に blue_message と blue_decompress 変数を追加して、圧縮されたバージョンと解凍されたバージョンのメッセージデータを表示します。
緑のカーペットの上にある暗い X マークまで歩き、compressor というオブジェクトを作成し、lzma.LZMACompressor() で初期化してください。これにより、lzma の関数で使用できるコンプレッサオブジェクトが作成されます。次に、green_bytes という変数を作成し、green_message を red_message や blue_message と同じ方法で bytes() 関数を使用してバイト形式に変換してください。
green_compression という変数を作成し、compressor.compress() の値を格納します。引数として green_bytes を追加し、このコンプレッサオブジェクトを使用してメッセージデータを圧縮します。用意された display() 関数に green_message と green_compression 変数を追加して、メッセージと圧縮データを確認してください。
緑のカーペットの上にある明るい X マークまで歩き、机に向かって、message_length と compression_length という2つの変数を修正してください。これらの変数には、len() 関数を使用して圧縮前と圧縮後のデータの文字数を格納します。message_length には green_message の長さを len() で取得し、同様に compression_length には green_compression の len() を格納してください。両方の変数に値が入ったら、用意された write() 関数を使用し、引数として message_length と compression_length を挿入して、圧縮サイズを確認し、レベルを終了します。