Przejdź do treści stopki
POMOC DOTYCZąCA JęZYKA PYTHON

msgpack python (jak to działa dla programistów)

MessagePack to wydajny format serializacji binarnej, który umożliwia wymianę danych między wieloma językami. Jest podobny do JSON, ale szybszy i bardziej kompaktowy. Biblioteka msgpack w języku Python zapewnia narzędzia niezbędne do pracy z tym formatem, oferując zarówno powiązania CPython, jak i implementację w czystym Pythonie.

Najważniejsze cechy MessagePack

  1. Wydajność: MessagePack został zaprojektowany tak, aby był bardziej wydajny niż JSON, zarówno pod względem szybkości, jak i rozmiaru. Osiąga to dzięki zastosowaniu formatu binarnego (specyfikacja msgpack), który zmniejsza obciążenie związane z formatami tekstowymi, takimi jak JSON.
  2. Obsługa wielu języków: MessagePack obsługuje wiele języków programowania, dzięki czemu idealnie nadaje się do aplikacji, w których dane muszą być udostępniane między różnymi systemami i językami.
  3. Kompatybilność: Biblioteka msgpack w języku Python jest kompatybilna zarówno z Pythonem 2, jak i Pythonem 3, a także z implementacjami CPython i PyPy.
  4. Niestandardowe typy danych: MessagePack umożliwia pakowanie i rozpakowywanie niestandardowych typów danych z zaawansowaną kontrolą rozpakowywania, co może być pomocne w przypadku złożonych aplikacji.

Instalacja

Zanim zaczniesz odczytywać i zapisywać dane MessagePack, musisz zainstalować bibliotekę msgpack, co można zrobić za pomocą pip:

pip install msgpack
pip install msgpack
SHELL

Podstawowe zastosowanie

Oto prosty przykład wykorzystania MessagePack do serializacji i deserializacji danych:

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

Zaawansowane funkcje

  1. Rozpakowywanie strumieniowe: MessagePack obsługuje rozpakowywanie strumieniowe, które pozwala rozpakować wiele obiektów z jednego strumienia. Jest to przydatne do przetwarzania dużych zbiorów danych lub ciągłych strumieni danych.
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. Niestandardowe typy danych: Można zdefiniować niestandardowe funkcje pakowania i rozpakowywania dla niestandardowych typów danych. Na przykład, aby obsłużyć niestandardowy typ danych 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

Przedstawiamy IronPDF

msgpack python (Jak to działa dla programistów): Rysunek 1

IronPDF to potężna biblioteka języka Python przeznaczona do tworzenia, edytowania i podpisywania plików PDF przy użyciu HTML, CSS, obrazów i JavaScript. Oferuje wydajność na poziomie komercyjnym przy niewielkim zużyciu pamięci. Najważniejsze cechy to:

Konwersja HTML do PDF

Konwertuj pliki HTML, ciągi znaków HTML i adresy URL na pliki PDF. Na przykład, renderuj stronę internetową jako plik PDF przy użyciu renderera PDF przeglądarki Chrome.

Obsługa wielu platform

Kompatybilny z różnymi platformami .NET, w tym .NET Core, .NET Standard i .NET Framework. Obsługuje systemy Windows, Linux i macOS.

Redakcja i podpisanie

Ustawiaj właściwości, dodawaj zabezpieczenia za pomocą haseł i uprawnień oraz stosuj podpisy cyfrowe w plikach PDF.

Szablony stron i ustawienia

Dostosuj pliki PDF, dodając nagłówki, stopki, numery stron i regulowane marginesy. Obsługuje responsywne układy i niestandardowe rozmiary papieru.

Zgodność z normami

Zgodność ze standardami PDF, takimi jak PDF/A i PDF/UA. Obsługuje kodowanie znaków UTF-8 oraz pliki takie jak obrazy, CSS i czcionki.

Generowanie dokumentów PDF przy użyciu IronPDF i 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

Wyjaśnienie kodu

Ten skrypt pokazuje integrację msgpack z IronPDF w celu serializacji i deserializacji danych, a także tworzenia dokumentu PDF z treści HTML.

Podział

  1. Serializacja danych za pomocą msgpack:

    • Konwertuje dane w języku Python (w tym przypadku słownik) do formatu binarnego (packed_data) przy użyciu msgpack.packb() z use_bin_type=True.
  2. Deserializacja danych za pomocą msgpack:

    • Konwertuje kod binarny packed_data z powrotem na dane w języku Python (unpacked_data) przy użyciu msgpack.unpackb() z raw=False.
  3. Obsługa niestandardowych typów danych:

    • Definiuje niestandardowe funkcje kodowania (encode_datetime) i dekodowania (decode_datetime) do obsługi obiektów datetime podczas serializacji i deserializacji przy użyciu msgpack.
  4. Treść HTML do generowania plików PDF:

    • Tworzy ciąg znaków HTML (content), który zawiera:
      • Nagłówek i podsekcje zawierające szczegółowe informacje na temat danych serializowanych (data i packed_data).
      • Dane deserializowane (unpacked_data).
      • Serializacja niestandardowych typów danych (datat i packed_datat).
  5. Generowanie plików PDF za pomocą IronPDF:

    • Wykorzystuje IronPDF (ChromePdfRenderer) do generowania dokumentu PDF (pdf) na podstawie skonstruowanej treści HTML (content).
  6. Zapisywanie pliku PDF:

    • Zapisuje wygenerowany dokument PDF jako "Demo-msgpack.pdf".

Wynik

msgpack python (Jak to działa dla programistów): Rysunek 2

PDF

msgpack python (Jak to działa dla programistów): Rysunek 3

Licencja IronPDF

IronPDF działa na kluczu licencyjnym dla języka Python. IronPDF for Python oferuje bezplatną licencję probną, aby umożliwić użytkownikom zapoznanie się z jego rozbudowanymi funkcjami przed zakupem.

Umieść klucz licencyjny na początku skryptu przed użyciem pakietu IronPDF:

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

Wnioski

MessagePack to potężne narzędzie do wydajnej serializacji danych w języku Python. Jego kompaktowy format binarny, obsługa wielu języków oraz możliwość obsługi niestandardowych typów danych sprawiają, że jest to wszechstronny wybór do różnych zastosowań. Niezależnie od tego, czy pracujesz nad wymianą danych między różnymi systemami, czy też optymalizujesz wydajność zadań związanych z przetwarzaniem danych, MessagePack oferuje solidne rozwiązanie.

IronPDF to wszechstronna biblioteka języka Python przeznaczona do tworzenia, edycji i renderowania dokumentów PDF bezpośrednio z poziomu aplikacji napisanych w języku Python. Ułatwia to takie zadania, jak konwersja HTML do PDF, tworzenie interaktywnych formularzy PDF oraz wykonywanie różnych operacji na dokumentach, takich jak scalanie i dzielenie plików PDF. Dzięki płynnej integracji z istniejącymi technologiami internetowymi IronPDF oferuje programistom potężny zestaw narzędzi do generowania dynamicznych plików PDF, zwiększając wydajność w zakresie zarządzania dokumentami i zadań związanych z prezentacją.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie