跳過到頁腳內容
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

2.自訂資料類型:您可以為自訂資料類型定義自訂打包和解包函數。例如,要處理 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/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 序列化資料:

* 使用`msgpack.packb()`和`use_bin_type=True`將 Python 資料(本例為字典)轉換為二進位格式( `packed_data` )。

2.使用 msgpack 反序列化資料:

* 使用`msgpack.unpackb()`將二進位`packed_data`轉換回 Python 資料 ( `unpacked_data` ),其中`raw=False` 。

3.自訂資料類型處理:

* 定義自訂編碼( `encode_datetime` )和解碼( `decode_datetime` )函數,以便在使用 msgpack 進行序列化和反序列化期間處理 datetime 物件。

4.用於產生 PDF 的 HTML 內容:

* 建立一個包含以下內容的 HTML 字串( `content` ):
    * 標題和子部分詳細說明序列化資料( `data`和`packed_data` )。
    * 反序列化資料( `unpacked_data` )。
    * 自訂資料類型序列化( `datat`和`packed_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 文件)等任務。 IronPDF 與現有 Web 技術無縫集成,為開發人員提供了一套強大的工具集,用於生成動態 PDF,從而提高文件管理和演示任務的效率。

Curtis Chau
技術作家

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

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