Saltar al pie de página
AYUDA DE PYTHON

msgpack python (Cómo Funciona Para Desarrolladores)

MessagePack es un formato de serialización binaria eficiente que permite el intercambio de datos entre múltiples lenguajes. Es similar a JSON pero más rápido y más compacto. La biblioteca msgpack en Python proporciona las herramientas necesarias para trabajar con este formato, ofreciendo tanto enlaces de CPython como una implementación pura de Python.

Características principales de MessagePack

  1. Eficiencia: MessagePack está diseñado para ser más eficiente que JSON, tanto en términos de velocidad como de tamaño. Logra esto usando un formato binario (especificación msgpack), que reduce la sobrecarga asociada con formatos basados en texto como JSON.
  2. Soporte entre lenguajes: MessagePack admite múltiples lenguajes de programación, lo que lo hace ideal para aplicaciones donde los datos deben compartirse entre diferentes sistemas y lenguajes.
  3. Compatibilidad: La biblioteca msgpack en Python es compatible con Python 2 y Python 3, así como con las implementaciones de CPython y PyPy.
  4. Tipos de datos personalizados: MessagePack permite el empaquetado y desempaquetado de tipos de datos personalizados con control de desempaquetado avanzado, lo cual puede ser útil para aplicaciones complejas.

Instalación

Antes de que puedas comenzar a leer y escribir datos de MessagePack, necesitas instalar la biblioteca msgpack, lo cual se puede hacer usando pip:

pip install msgpack
pip install msgpack
SHELL

Uso básico

Aquí hay un ejemplo simple de cómo usar MessagePack para serializar y deserializar datos:

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

Características avanzadas

  1. Desempaquetado en flujo: MessagePack admite el desempaquetado en flujo, que desempaqueta múltiples objetos de un solo flujo. Esto es útil para procesar grandes conjuntos de datos o flujos de datos continuos.
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. Tipos de datos personalizados: Puedes definir funciones de empaquetado y desempaquetado personalizadas para tipos de datos personalizados. Por ejemplo, para manejar el tipo de dato personalizado 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

Presentando IronPDF

msgpack python (Cómo funciona para desarrolladores): Figura 1

IronPDF es una poderosa biblioteca de Python diseñada para crear, editar y firmar PDFs usando HTML, CSS, imágenes y JavaScript. Ofrece un rendimiento de calidad comercial con un bajo uso de memoria. Las características clave son:

Conversión de HTML a PDF

Convierte archivos HTML, cadenas HTML y URLs a PDFs. Por ejemplo, renderiza una página web como PDF utilizando el renderizador PDF de Chrome.

Soporte multiplataforma

Compatible con varias plataformas .NET, incluyendo .NET Core, .NET Standard y .NET Framework. Es compatible con Windows, Linux y macOS.

Edición y firma

Establece propiedades, añade seguridad con contraseñas y permisos, y aplica firmas digitales a tus PDFs.

Plantillas de página y configuración

Personaliza PDFs con encabezados, pies de página, números de página y márgenes ajustables. Soporta diseños responsivos y tamaños de papel personalizados.

Cumplimiento de normas

Adhiere a normas PDF como PDF/A y PDF/UA. Soporta codificación de caracteres UTF-8 y maneja activos como imágenes, CSS y fuentes.

Generar documentos PDF con IronPDF y msgpack

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

Explicación del código

Este script demuestra la integración de msgpack con IronPDF para serializar y deserializar datos, así como crear un documento PDF a partir de contenido HTML.

Desglose

  1. Serialización de datos con msgpack:

    • Convierte datos de Python (dict en este caso) en un formato binario (packed_data) usando msgpack.packb() con use_bin_type=True.
  2. Deserialización de datos con msgpack:

    • Convierte los datos binarios packed_data de regreso a datos de Python (unpacked_data) usando msgpack.unpackb() con raw=False.
  3. Gestión de tipos de datos personalizados:

    • Define funciones de codificación personalizada (encode_datetime) y decodificación (decode_datetime) para manejar objetos datetime durante la serialización y deserialización usando msgpack.
  4. Contenido HTML para la generación de PDF:

    • Construye una cadena HTML (content) que incluye:
      • Cabecera y subsecciones detallando los datos serializados (data y packed_data).
      • Datos deserializados (unpacked_data).
      • Serialización de tipos de datos personalizados (datat y packed_datat).
  5. Generación de PDF con IronPDF:

    • Usa IronPDF (ChromePdfRenderer) para generar un documento PDF (pdf) a partir del contenido HTML construido (content).
  6. Guardando el PDF:
  • Guarda el documento PDF generado como "Demo-msgpack.pdf".

Resultado

msgpack python (Cómo funciona para desarrolladores): Figura 2

PDF

msgpack python (Cómo funciona para desarrolladores): Figura 3

Licencia de IronPDF

IronPDF se ejecuta con la clave de licencia para Python. IronPDF para Python ofrece una clave de licencia de prueba gratuita para permitir a los usuarios revisar sus extensas características antes de la compra.

Coloca la clave de licencia al inicio del script antes de usar el paquete IronPDF:

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

Conclusión

MessagePack es una herramienta poderosa para la serialización eficiente de datos en Python. Su formato binario compacto, soporte entre lenguajes y capacidad de manejar tipos de datos personalizados lo hacen una opción versátil para diversas aplicaciones. Ya sea que estés trabajando en el intercambio de datos entre diferentes sistemas o optimizando el rendimiento de tus tareas de procesamiento de datos, MessagePack ofrece una solución robusta.

IronPDF es una biblioteca de Python versátil diseñada para crear, manipular y renderizar documentos PDF directamente desde aplicaciones en Python. Simplifica tareas como convertir HTML a PDF, crear formularios PDF interactivos y realizar varias manipulaciones de documentos como fusionar y dividir archivos PDF. Con una integración perfecta en tecnologías web existentes, IronPDF ofrece a los desarrolladores un potente conjunto de herramientas para generar PDFs dinámicos, mejorando la productividad en tareas de gestión de documentos y presentación.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más