跳過到頁腳內容
PYTHON 幫助

msgpack python(開發人員工作原理)

MessagePack 是一種高效的二進制序列化格式,允許多種語言之間的數據交換。 它類似於 JSON,但速度更快且更緊湊。 Python 中的 msgpack 庫提供了處理此格式所需的工具,提供了 CPython 綁定和純 Python 實現。

MessagePack 的關鍵特性

  1. 效率MessagePack 設計上比 JSON 更高效,既在速度方面也在大小方面。它通過使用二進制格式(msgpack 規範)達成這一目標,從而減少了類似 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 是一個功能強大的 Python 庫,旨在使用 HTML、CSS、圖像和 JavaScript 創建、編輯和簽署 PDF。 它具有商業級性能且內存佔用低。 關鍵特性包括:

HTML 到 PDF 轉換

將 HTML 文件、HTML 字串和 URL 轉換為 PDF。 例如,使用Chrome PDF渲染器將網頁呈現為PDF。

跨平台支持

兼容各種 .NET 平台,包括 .NET Core、.NET Standard 和 .NET Framework。 支持Windows、Linux和macOS。

編輯和簽名

設置屬性,使用密碼和權限添加安全性,並將電子簽名應用於您的 PDF。

頁面模板和設置

自定義 PDF 的頁眉、頁腳、頁碼和可調邊距。 支持響應式佈局和自定義紙張大小。

標準合規

遵循 PDF 標準,如 PDF/A 和 PDF/UA。 支持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 將數據序列化:

    • 使用 msgpack.packb()use_bin_type=True 將 Python 數據(此例中為 dict)轉換為二進制格式(packed_data)。
  2. 使用 msgpack 將數據反序列化:

    • 使用 msgpack.unpackb()raw=False 將二進制 packed_data 轉換回 Python 數據(unpacked_data)。
  3. 自定義數據類型處理:

    • 定義自定義編碼(encode_datetime)和解碼(decode_datetime)函數來處理序列化和反序列化過程中的 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 庫,專為直接從 Python 應用程序創建、操作和渲染 PDF 文檔而設計。 它簡化了將 HTML 轉換為 PDF、創建交互式 PDF 表單以及執行各種文檔操作(如合併和拆分 PDF 文件)的任務。 通過無縫整合現有 Web 技術,IronPDF 為開發人員提供了一套強大的工具,用於生成動態 PDF,提升文檔管理和展示任務的生產力。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。