PYTHON 幫助

msgpack python(對開發人員的運作方式)

發佈 2024年9月29日
分享:

介紹

MessagePack 是一種高效的二進制序列化格式,可在多種語言之間進行數據交換,它類似於 JSON,但速度更快且更緊湊。 這 msgpack Python 庫提供了必要的工具來處理這種格式,提供了 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
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'pip install msgpack
VB   C#

基本用法

以下是一個使用 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)
#Serialize key value pairs or file like object
#Deserialize data
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'import msgpack data = {'key': 'value', 'number': 42} packed_data = msgpack.packb(data, use_bin_type=@True) unpacked_data = msgpack.unpackb(packed_data, raw=@False) print(unpacked_data)
VB   C#

進階功能

  1. 串流解包:MessagePack 支持串流解包,能從單一流中解包多個物件。 這對於處理大型數據集或連續數據流很有用。
import msgpack
from io import BytesIO
# Create a buffer
buf = BytesIO()
for i in range(100):
    buf.write(msgpack.packb(i))
buf.seek(0)
unpacker = msgpack.Unpacker(buf)
for unpacked in unpacker:
    print(unpacked)
import msgpack
from io import BytesIO
# Create a buffer
buf = BytesIO()
for i in range(100):
    buf.write(msgpack.packb(i))
buf.seek(0)
unpacker = msgpack.Unpacker(buf)
for unpacked in unpacker:
    print(unpacked)
#Create a buffer
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'import msgpack from io import BytesIO buf = BytesIO() for i in range(100): buf.write(msgpack.packb(i)) buf.seek(0) unpacker = msgpack.Unpacker(buf) for unpacked in unpacker: print(unpacked)
VB   C#
  1. 自定義資料類型:您可以為自定義資料類型定義自定義封裝和解封函數。例如,要處理日期時間自定義資料類型:
import datetime
import msgpack
# uses default sequence type
def encode_datetime(obj): # default value
    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):
    if '__datetime__' in obj:
        return datetime.datetime.strptime(obj['as_str'], '%Y%m%dT%H:%M:%S.%f')
    return obj
data = {'time': datetime.datetime.now()}
packed_data = msgpack.packb(data, default=encode_datetime)
unpacked_data = msgpack.unpackb(packed_data, object_hook=decode_datetime)
print(unpacked_data)
import datetime
import msgpack
# uses default sequence type
def encode_datetime(obj): # default value
    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):
    if '__datetime__' in obj:
        return datetime.datetime.strptime(obj['as_str'], '%Y%m%dT%H:%M:%S.%f')
    return obj
data = {'time': datetime.datetime.now()}
packed_data = msgpack.packb(data, default=encode_datetime)
unpacked_data = msgpack.unpackb(packed_data, object_hook=decode_datetime)
print(unpacked_data)
#uses default sequence type
import datetime import msgpack Function encode_datetime(ByVal As obj) As def
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'	'__datetime__': @True, 'as_str': obj.strftime('%Y%m%dT%H:%M:%S.%f')} Return obj def decode_datetime(obj): if '__datetime__' in obj: Return datetime.datetime.strptime(obj['as_str'], '%Y%m%dT%H:%M:%S.%f') Return obj data = {'time': datetime.datetime.now()} packed_data = msgpack.packb(data, default=encode_datetime) unpacked_data = msgpack.unpackb(packed_data, object_hook=decode_datetime) print(unpacked_data)
VB   C#

介紹 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
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):
    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):
    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)  
renderer = ChromePdfRenderer()
# Create a PDF from a HTML string using Python
content = "<h1>Awesome Iron PDF with msgpack</h1>"
content += "<h3>Serialize data</h3>"
content += "<p>"+str(data)+"</p>"
content += "<p> msgpack.packb(data, use_bin_type=True):</p><p>"+str(packed_data)+"</p>"
content += "<h3>Deserialize data</h3>"
content += "<p> msgpack.unpackb(packed_data, raw=False):</p><p>"+str(unpacked_data)+"</p>"
content += "<h3>Encode Custom Data Types</h3>"
content += "<p>"+str(datat)+"</p>"
content += "<p>  msgpack.packb(datat, default=encode_datetime):</p><p>"+str(packed_datat)+"</p>"
pdf = renderer.RenderHtmlAsPdf(content)
    # Export to a file or Stream
pdf.SaveAs("Demo-msgpack.pdf")
import msgpack
import datetime
from ironpdf import * 
# Apply your license key
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):
    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):
    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)  
renderer = ChromePdfRenderer()
# Create a PDF from a HTML string using Python
content = "<h1>Awesome Iron PDF with msgpack</h1>"
content += "<h3>Serialize data</h3>"
content += "<p>"+str(data)+"</p>"
content += "<p> msgpack.packb(data, use_bin_type=True):</p><p>"+str(packed_data)+"</p>"
content += "<h3>Deserialize data</h3>"
content += "<p> msgpack.unpackb(packed_data, raw=False):</p><p>"+str(unpacked_data)+"</p>"
content += "<h3>Encode Custom Data Types</h3>"
content += "<p>"+str(datat)+"</p>"
content += "<p>  msgpack.packb(datat, default=encode_datetime):</p><p>"+str(packed_datat)+"</p>"
pdf = renderer.RenderHtmlAsPdf(content)
    # Export to a file or Stream
pdf.SaveAs("Demo-msgpack.pdf")
#Apply your license key
#Serialize data
#Deserialize data
#Custom Data Types
'INSTANT VB TODO TASK: The following line could not be converted:
import msgpack import datetime from ironpdf import * License.LicenseKey = "key" data = {
If True Then
#Create a PDF from a HTML string using Python
	#Export to a file or Stream
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'	'__datetime__': @True, 'as_str': obj.strftime('%Y%m%dT%H:%M:%S.%f')} Return obj def decode_datetime(obj): 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) renderer = ChromePdfRenderer() content = "<h1>Awesome Iron PDF with msgpack</h1>" content += "<h3>Serialize data</h3>" content += "<p>"+str(data)+"</p>" content += "<p> msgpack.packb(data, use_bin_type=True):</p><p>"+str(packed_data)+"</p>" content += "<h3>Deserialize data</h3>" content += "<p> msgpack.unpackb(packed_data, raw=False):</p><p>"+str(unpacked_data)+"</p>" content += "<h3>Encode Custom Data Types</h3>" content += "<p>"+str(datat)+"</p>" content += "<p>  msgpack.packb(datat, default=encode_datetime):</p><p>"+str(packed_datat)+"</p>" pdf = renderer.RenderHtmlAsPdf(content) pdf.SaveAs("Demo-msgpack.pdf")
VB   C#

程式碼說明

此腳本展示了如何將msgpack與IronPDF集成,用於序列化和反序列化數據,並從HTML內容創建PDF文檔。

故障分析

  1. 使用 msgpack 進行資料序列化:

    • 轉換 Python 數據 (在這種情況下的字典) 轉換為二進位格式 (打包資料) 使用 msgpack.packb() 使用 use_bin_type=True。
  2. 使用 msgpack 反序列化資料:

    • 將二進位的 packed_data 轉回 Python 資料 (未封裝_資料) 使用 msgpack.unpackb() 與 raw=False。
  3. 自訂資料類型處理:

    • 定義自訂編碼 (encode_datetime) 解碼 (解碼_日期時間) 使用 msgpack 序列化和反序列化時處理 datetime 物件的函數。
  4. 用於 PDF 生成的 HTML 內容:

    • 構建 HTML 字串 (內容) 包含:

      • 標題及子節描述序列化數據 (資料和打包資料).

      • 反序列化資料 (解壓縮資料).
      • 自訂資料類型序列化 (datat 和 packed_datat).
  5. 使用 IronPDF 生成 PDF:

    • 使用 IronPDF (ChromePdfRenderer) 生成 PDF 文件 (PDF) 從構建的HTML內容中 (內容).
  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"
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

結論

MessagePack 是一個在 Python 中用於高效數據序列化的強大工具。 其緊湊的二進制格式、跨語言支持和處理自訂數據類型的能力,使其成為各種應用程式的多功能選擇。 無論您是在處理不同系統之間的數據交換,還是在優化數據處理任務的性能,MessagePack 都提供了一個強大的解決方案。

IronPDF 是一個多功能的 Python 函式庫,旨在直接從 Python 應用程式創建、操作和呈現 PDF 文件。 它簡化了將 HTML 轉換為 PDF、創建互動式 PDF 表單,以及執行合併和拆分 PDF 文件等各種文檔操作的任務。 IronPDF 無縫整合到現有的網頁技術中,為開發者提供了一套強大的工具,可以生成動態 PDF,增強文件管理和展示任務的生產力。

下一個 >
PyYAML(如何為開發人員運作)

準備開始了嗎? 版本: 2024.9 剛剛發布

免費 pip 安裝 查看許可證 >