IRONSOFTWAREHOME
PYTHON 幫助

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

Curtis Chau
Curtis Chau
Updated: 2026年4月21日

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
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)
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)
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)
Python

介紹 IronPDF

msgpack python (How It Works For Developers): Figure 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
Python

程式碼說明

此腳本演示了msgpack與IronPDF的整合,用於序列化和反序列化資料,以及從HTML內容建立PDF文件。

分解

  1. 使用msgpack序列化資料:

    • 將Python資料(在此情況下為dict)轉換為二進格式(use_bin_type=True
  2. 使用msgpack反序列化資料:

    • 使用unpacked_data)。
  3. 自訂資料型別處理:

    • 定義自訂的編碼(decode_datetime)函式,以便在序列化和反序列化期間使用msgpack處理datetime物件。
  4. PDF生成的HTML內容:

    • 構建一個包括:的HTML字串(content)。
      • 顯示序列化資料的標頭和子部分(packed_data)。
      • 反序列化資料(unpacked_data)。
      • 自訂資料型別序列化(packed_datat)。
  5. 使用IronPDF進行PDF生成:

    • 使用IronPDF(ChromePdfRenderer)從構建的HTML內容(pdf)。
  6. 保存PDF:

    • 將生成的PDF文件保存為"Demo-msgpack.pdf"。

輸出

msgpack python (How It Works For Developers): Figure 2

PDF

msgpack python (How It Works For Developers): Figure 3

IronPDF 授權

IronPDF 在 Python 的授權金鑰下運行。 IronPDF for Python提供免費試用授權金鑰,以便使用者在購買前可以查看其豐富的功能。

將授權金鑰放在腳本開始處,以便在使用 IronPDF 套件之前使用:

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
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

Related Articles

Key in blue circle

立即免費取得 30 天試用金鑰

bullet_checked無需信用卡或建立帳號
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預約您的免費即時演示
Booking Badge related to IronPDF Product Demo

全球數百萬工程師的信賴

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
全球數百萬工程師的信賴
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立