Pythonのstructモジュール入門:データ型とバイト列の相互変換
このチュートリアルでは、Pythonのstructモジュールについて詳しく解説します。それでは早速見ていきましょう。
structモジュールは、Pythonのネイティブなデータ型をバイト列(bytes)に変換したり、その逆の変換を行ったりするために使用されるモジュールです。標準ライブラリに含まれる組み込みモジュールのため、追加のインストールは一切不要です。
structモジュールはC言語と密接な関係があります。このモジュールを扱うには、C言語で各データ型を表すために使用されるフォーマット文字(記法)を理解しておく必要があります。主なものを以下の表にまとめました。
| データ型 | フォーマット文字 |
|---|---|
| int(整数) | i |
| char(文字) | c |
| string(文字列) | s |
| float(浮動小数点数) | f |
それでは、Pythonのデータ型をバイト列に変換する具体的な方法を見ていきましょう。
struct.pack()
struct.pack()メソッドは、データ型をバイト列に変換するために使用します。最初の引数として渡したフォーマット文字列に応じて、複数の引数を受け取ることができます。
最初の引数には、上記の表にあるフォーマット文字を使ったフォーマット文字列を渡します。それ以降の引数は、フォーマットに合わせて自由に指定可能です。いくつか例を挙げてみます。
- struct.pack('14s i', b'Tutorialspoint', 2020)
- struct.pack('i i f 3s', 1, 2, 3.5, b'abc')
上記の例を実際にバイト列へ変換してみます。
例
# structモジュールをインポート
import struct
# バイト列への変換
print(struct.pack('14s i', b'Tutorialspoint', 2020))
print(struct.pack('i i f 3s', 1, 2, 3.5, b'abc'))
出力結果
上記のコードを実行すると、次のような結果が得られます。
b'Tutorialspoint\x00\x00\xe4\x07\x00\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00`@abc'
struct.unpack()
もう一つの重要なメソッドであるstruct.unpack()は、バイト列をPythonのネイティブなデータ型に復元するために使用します。引数は2つで、1つ目はpack()メソッドと同じ形式のフォーマット文字列、2つ目はstruct.pack()の戻り値であるバイト列です。
struct.unpack()は常にタプル(tuple)を返すという点に注意してください。
例
# structモジュールをインポート
import struct
# バイト列への変換
converted_bytes = struct.pack('14s i', b'Tutorialspoint', 2020)
# Pythonのデータ型への復元
print(struct.unpack('14s i', converted_bytes))
出力結果
上記のコードを実行すると、次のような結果が得られます。
(b'Tutorialspoint', 2020)
まとめ
このように、structモジュールを使えばPythonのデータ型とバイト列を簡単に相互変換できます。バイナリファイルの読み書きやネットワーク通信など、低レベルなデータ処理が必要な場面で非常に役立ちます。本チュートリアルについて不明な点がある場合は、コメント欄でお気軽にお尋ねください。
-
PythonのpyqrcodeモジュールでQRコードを生成する方法
QRコードは、白い背景の上に黒い四角形を格子状に配置した2次元コードで、カメラなどの画像読み取り装置によって読み取ることができます。商業用途での在庫追跡や決済、ウェブサイトへのログインなど、スマートフォンユーザー向けのさまざまなアプリケーションで広く利用されています。Pythonではpyqrcodeモジュールを使うことで、簡単にQRコードを生成できます。QRコードには、データを効率的に格納するための4つの標準エンコードモード(数値モード、英数字モード、バイト/バイナリモード、漢字モード)が用意されています。英数字のQRコードを生成するpyqrcodeモジュールには、QRコードを生成するためのc
-
Pythonのgetpassモジュールとは?パスワード入力とユーザー名取得の基本を解説
Pythonの標準ライブラリには、ターミナル上で動作するアプリケーションにおいて、ユーザーの認証情報を検証してから処理を実行したい場合に役立つgetpassモジュールが用意されています。このモジュールには主に2つの関数が定義されており、セキュリティを意識したコマンドラインツールの開発に欠かせない存在です。 getpass() 関数:パスワードを安全に入力する getpass()関数は、ユーザーにパスワードの入力を促すための関数です。デフォルトでは、ターミナルに入力されたキーは画面に表示(エコー)されないため、第三者にパスワードを盗み見られる心配がありません。 また、プロンプトとして表示される