Python
 Computer >> コンピューター >  >> プログラミング >> Python

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のデータ型とバイト列を簡単に相互変換できます。バイナリファイルの読み書きやネットワーク通信など、低レベルなデータ処理が必要な場面で非常に役立ちます。本チュートリアルについて不明な点がある場合は、コメント欄でお気軽にお尋ねください。

  1. PythonのpyqrcodeモジュールでQRコードを生成する方法

    QRコードは、白い背景の上に黒い四角形を格子状に配置した2次元コードで、カメラなどの画像読み取り装置によって読み取ることができます。商業用途での在庫追跡や決済、ウェブサイトへのログインなど、スマートフォンユーザー向けのさまざまなアプリケーションで広く利用されています。Pythonではpyqrcodeモジュールを使うことで、簡単にQRコードを生成できます。QRコードには、データを効率的に格納するための4つの標準エンコードモード(数値モード、英数字モード、バイト/バイナリモード、漢字モード)が用意されています。英数字のQRコードを生成するpyqrcodeモジュールには、QRコードを生成するためのc

  2. Pythonのgetpassモジュールとは?パスワード入力とユーザー名取得の基本を解説

    Pythonの標準ライブラリには、ターミナル上で動作するアプリケーションにおいて、ユーザーの認証情報を検証してから処理を実行したい場合に役立つgetpassモジュールが用意されています。このモジュールには主に2つの関数が定義されており、セキュリティを意識したコマンドラインツールの開発に欠かせない存在です。 getpass() 関数:パスワードを安全に入力する getpass()関数は、ユーザーにパスワードの入力を促すための関数です。デフォルトでは、ターミナルに入力されたキーは画面に表示(エコー)されないため、第三者にパスワードを盗み見られる心配がありません。 また、プロンプトとして表示される