フッターコンテンツにスキップ
PYTHONヘルプ

msgpack Python(開発者向けのしくみ)

MessagePackは、複数の言語間でデータを交換するための効率的なバイナリシリアライズ形式です。 JSONに似ていますが、より高速でコンパクトです。 Pythonのmsgpackライブラリはこの形式を扱うための必要なツールを提供し、CPythonバインディングとピュアPythonの実装を備えています。

MessagePackの主な機能

  1. 効率性: MessagePackは、速度とサイズの両面でJSONよりも効率的であるように設計されています。バイナリ形式(msgpack spec)を使用し、JSONのようなテキストベースの形式に伴うオーバーヘッドを減らします。
  2. クロス言語サポート: MessagePackは複数のプログラミング言語をサポートし、異なるシステムや言語間でデータを共有する必要があるアプリケーションに理想的です。
  3. 互換性: Pythonのmsgpackライブラリは、Python 2とPython 3の両方、およびCPythonとPyPyの実装と互換性があります。
  4. カスタムデータ型: MessagePackは、カスタムデータ型のパッキングとアンパッキングを高度な制御で行うことができ、複雑なアプリケーションで役立ちます。

インストール

MessagePackデータを読み書きする前に、msgpackライブラリをpipでインストールする必要があります。

pip install msgpack
pip install msgpack
SHELL

基本的な使い方

ここに、データをシリアライズ/デシリアライズするためのMessagePackのシンプルな使用例があります。

import msgpack

# Serialize key-value pairs or file-like object
data = {'key': 'value', 'number': 42}
packed_data = msgpack.packb(data, use_bin_type=True)

# Deserialize data
unpacked_data = msgpack.unpackb(packed_data, raw=False)
print(unpacked_data)
import msgpack

# Serialize key-value pairs or file-like object
data = {'key': 'value', 'number': 42}
packed_data = msgpack.packb(data, use_bin_type=True)

# Deserialize data
unpacked_data = msgpack.unpackb(packed_data, raw=False)
print(unpacked_data)
PYTHON

高度な機能

  1. ストリーミングアンパッキング: MessagePackは、単一のストリームから複数のオブジェクトをアンパックするストリーミングアンパッキングをサポートしています。 これは、大規模なデータセットや継続的なデータストリームを処理するのに役立ちます。
import msgpack
from io import BytesIO

# Create a buffer for streaming data
buf = BytesIO()
for i in range(100):
    buf.write(msgpack.packb(i))
buf.seek(0)

# Unpack data from the buffer
unpacker = msgpack.Unpacker(buf)
for unpacked in unpacker:
    print(unpacked)
import msgpack
from io import BytesIO

# Create a buffer for streaming data
buf = BytesIO()
for i in range(100):
    buf.write(msgpack.packb(i))
buf.seek(0)

# Unpack data from the buffer
unpacker = msgpack.Unpacker(buf)
for unpacked in unpacker:
    print(unpacked)
PYTHON
  1. カスタムデータ型: カスタムデータ型のためのカスタムパッキング/アンパッキング関数を定義することができます。例えば、datetimeカスタムデータ型を処理するために:
import datetime
import msgpack

def encode_datetime(obj):
    """Encode datetime objects for MessagePack serialization."""
    if isinstance(obj, datetime.datetime):
        return {'__datetime__': True, 'as_str': obj.strftime('%Y%m%dT%H:%M:%S.%f')}
    return obj

def decode_datetime(obj):
    """Decode datetime objects after MessagePack deserialization."""
    if '__datetime__' in obj:
        return datetime.datetime.strptime(obj['as_str'], '%Y%m%dT%H:%M:%S.%f')
    return obj

# Serialize data with custom datetime support
data = {'time': datetime.datetime.now()}
packed_data = msgpack.packb(data, default=encode_datetime)

# Deserialize data with custom datetime support
unpacked_data = msgpack.unpackb(packed_data, object_hook=decode_datetime)
print(unpacked_data)
import datetime
import msgpack

def encode_datetime(obj):
    """Encode datetime objects for MessagePack serialization."""
    if isinstance(obj, datetime.datetime):
        return {'__datetime__': True, 'as_str': obj.strftime('%Y%m%dT%H:%M:%S.%f')}
    return obj

def decode_datetime(obj):
    """Decode datetime objects after MessagePack deserialization."""
    if '__datetime__' in obj:
        return datetime.datetime.strptime(obj['as_str'], '%Y%m%dT%H:%M:%S.%f')
    return obj

# Serialize data with custom datetime support
data = {'time': datetime.datetime.now()}
packed_data = msgpack.packb(data, default=encode_datetime)

# Deserialize data with custom datetime support
unpacked_data = msgpack.unpackb(packed_data, object_hook=decode_datetime)
print(unpacked_data)
PYTHON

IronPDFの紹介

msgpack python(開発者向けの動作方法):図1

IronPDFは、HTML、CSS、画像、JavaScriptを使用してPDFを作成、編集、署名するために設計された強力なPythonライブラリです。 低メモリフットプリントながら商用グレードのパフォーマンスを備えています。 主な機能は以下のとおりです:

HTMLからPDFへの変換

HTMLファイル、HTML文字列、およびURLをPDFに変換します。 たとえば、Chrome PDFレンダラーを使用してウェブページをPDFとしてレンダリングします。

クロスプラットフォームサポート

.NET Core、.NET Standard、.NET Frameworkを含むさまざまな.NETプラットフォームと互換性があります。 Windows、Linux、macOSをサポートしています。

編集と署名

プロパティを設定し、パスワードと権限でセキュリティを追加し、PDFにデジタル署名を適用します。

ページテンプレートと設定

ヘッダー、フッター、ページ番号、調整可能な余白を使用してPDFをカスタマイズします。 レスポンシブレイアウトやカスタム用紙サイズをサポートします。

標準準拠

PDF/AやPDF/UAなどのPDF標準に準拠しています。 UTF-8文字エンコーディングをサポートし、画像、CSS、フォントなどのアセットを処理します。

IronPDFとmsgpackを使用してPDFドキュメントを生成する

import msgpack
import datetime
from ironpdf import * 

# Apply your license key for IronPDF
License.LicenseKey = "key"

# Serialize data
data = {'key': 'value', 'number': 42}
packed_data = msgpack.packb(data, use_bin_type=True)

# Deserialize data
unpacked_data = msgpack.unpackb(packed_data, raw=False)
print(unpacked_data)

# Custom Data Types
def encode_datetime(obj):
    """Encode datetime objects for MessagePack serialization."""
    if isinstance(obj, datetime.datetime):
        return {'__datetime__': True, 'as_str': obj.strftime('%Y%m%dT%H:%M:%S.%f')}
    return obj

def decode_datetime(obj):
    """Decode datetime objects after MessagePack deserialization."""
    if '__datetime__' in obj:
        return datetime.datetime.strptime(obj['as_str'], '%Y%m%dT%H:%M:%S.%f')
    return obj

datat = {'time': datetime.datetime.now()}
packed_datat = msgpack.packb(datat, default=encode_datetime)
unpacked_datat = msgpack.unpackb(packed_datat, object_hook=decode_datetime)
print(unpacked_datat)  

# Render a PDF from a HTML string using Python
renderer = ChromePdfRenderer()
content = "<h1>Awesome Iron PDF with msgpack</h1>"
content += "<h3>Serialize data</h3>"
content += f"<p>{data}</p>"
content += f"<p> msgpack.packb(data, use_bin_type=True):</p><p>{packed_data}</p>"
content += "<h3>Deserialize data</h3>"
content += f"<p> msgpack.unpackb(packed_data, raw=False):</p><p>{unpacked_data}</p>"
content += "<h3>Encode Custom Data Types</h3>"
content += f"<p>{datat}</p>"
content += f"<p> msgpack.packb(datat, default=encode_datetime):</p><p>{packed_datat}</p>"

pdf = renderer.RenderHtmlAsPdf(content)
pdf.SaveAs("Demo-msgpack.pdf")  # Export to a file
import msgpack
import datetime
from ironpdf import * 

# Apply your license key for IronPDF
License.LicenseKey = "key"

# Serialize data
data = {'key': 'value', 'number': 42}
packed_data = msgpack.packb(data, use_bin_type=True)

# Deserialize data
unpacked_data = msgpack.unpackb(packed_data, raw=False)
print(unpacked_data)

# Custom Data Types
def encode_datetime(obj):
    """Encode datetime objects for MessagePack serialization."""
    if isinstance(obj, datetime.datetime):
        return {'__datetime__': True, 'as_str': obj.strftime('%Y%m%dT%H:%M:%S.%f')}
    return obj

def decode_datetime(obj):
    """Decode datetime objects after MessagePack deserialization."""
    if '__datetime__' in obj:
        return datetime.datetime.strptime(obj['as_str'], '%Y%m%dT%H:%M:%S.%f')
    return obj

datat = {'time': datetime.datetime.now()}
packed_datat = msgpack.packb(datat, default=encode_datetime)
unpacked_datat = msgpack.unpackb(packed_datat, object_hook=decode_datetime)
print(unpacked_datat)  

# Render a PDF from a HTML string using Python
renderer = ChromePdfRenderer()
content = "<h1>Awesome Iron PDF with msgpack</h1>"
content += "<h3>Serialize data</h3>"
content += f"<p>{data}</p>"
content += f"<p> msgpack.packb(data, use_bin_type=True):</p><p>{packed_data}</p>"
content += "<h3>Deserialize data</h3>"
content += f"<p> msgpack.unpackb(packed_data, raw=False):</p><p>{unpacked_data}</p>"
content += "<h3>Encode Custom Data Types</h3>"
content += f"<p>{datat}</p>"
content += f"<p> msgpack.packb(datat, default=encode_datetime):</p><p>{packed_datat}</p>"

pdf = renderer.RenderHtmlAsPdf(content)
pdf.SaveAs("Demo-msgpack.pdf")  # Export to a file
PYTHON

コードの説明

このスクリプトは、データのシリアライズとデシリアライズのためのmsgpackとIronPDFの統合、およびHTMLコンテンツからPDFドキュメントを作成する方法を示しています。

ブレークダウン

  1. msgpackを使用したデータのシリアライズ:

    • use_bin_type=Trueを使用して、Pythonデータ(この場合は辞書)をmsgpack.packb()でバイナリ形式(packed_data)に変換します。
  2. msgpackを使用したデータのデシリアライズ:

    • raw=Falseを使用して、バイナリpacked_dataをPythonデータ(unpacked_data)に戻します。
  3. カスタムデータ型の処理:

    • デシリアライズ中のdatetimeオブジェクトを処理するために、カスタムエンコーディング(encode_datetime)とデコーディング(decode_datetime)関数を定義します。
  4. PDF生成のためのHTMLコンテンツ:

    • 以下を含むHTML文字列(content)を構築します。
      • シリアライズされたデータ(datapacked_data)の詳細を記載したヘッダーとサブセクション。
      • デシリアライズされたデータ(unpacked_data)。
      • カスタムデータ型のシリアライズ(datatpacked_datat)。
  5. IronPDFによるPDF生成:

    • IronPDF(ChromePdfRenderer)を使用して、構築されたHTMLコンテンツ(content)からPDFドキュメント(pdf)を生成します。
  6. PDFの保存:

    • 生成されたPDFドキュメントを「Demo-msgpack.pdf」という名前で保存します。

出力

msgpack python(開発者向けの動作方法):図2

PDF

msgpack python(開発者向けの動作方法):図3

IronPDFライセンス

IronPDFはPythonのライセンスキーで動作します。 IronPDF for Pythonは、広範な機能を購入前にチェックできる無料トライアルライセンスキーを提供します。

スクリプトの冒頭にIronPDFパッケージを使用する前にライセンスキーを配置します。

from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
PYTHON

結論

MessagePackは、Pythonにおける効率的なデータシリアライズのための強力なツールです。 そのコンパクトなバイナリ形式、クロス言語サポート、およびカスタムデータ型を扱う能力により、さまざまなアプリケーションにおいて多目的な選択肢となります。 異なるシステム間でのデータ交換や、データ処理タスクのパフォーマンスの最適化に取り組んでいる場合は、MessagePackが頑強なソリューションを提供します。

IronPDFは、Pythonアプリケーションから直接PDFドキュメントを作成、操作、レンダリングするために設計された多目的Pythonライブラリです。 HTMLをPDFに変換したり、インタラクティブなPDFフォームを作成したり、PDFファイルの結合や分割などのさまざまな文書操作を簡素化します。 既存のWeb技術へのシームレスな統合を通じて、IronPDFは、ドキュメント管理やプレゼンテーションタスクにおける生産性を向上させる動的なPDF生成のための開発者向け強力なツールセットを提供します。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。