Pydifact: EDIFACT Parser and Serializer

0.2.3 · active · verified Thu Apr 16

Pydifact is a Python library designed to provide comprehensive support for reading and writing EDIFACT (Electronic Data Interchange For Administration, Commerce and Transport) files. Despite being an older format, EDIFACT remains a standard in many business sectors, such as for the transfer of medical reports in Austria. This library is a work in progress, with its current version being 0.2.3, and the API is not yet stable, implying a potentially rapid release cadence with breaking changes.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to parse an EDIFACT interchange from a string and iterate through its messages and segments. It also shows how to construct a new interchange programmatically and serialize it into an EDIFACT string.

from pydifact.segmentcollection import Interchange
from pydifact.segments import Segment

# Example EDIFACT data (Interchange containing one message)
edifact_data = (
    "UNA:+,? '\n"
    "UNB+UNOC:1+1234+3333+200102:2212+42'\n"
    "UNH+42z42+PAORES:93:1:IA'\n"
    "MSG+1:45'\n"
    "IFT+3+XYZCOMPANY AVAILABILITY'\n"
    "ERC+A7V:1:AMD'\n"
    "UNT+5+42z42'\n"
    "UNZ+2+42'"
)

# --- Reading an EDIFACT interchange from a string ---
interchange = Interchange.from_str(edifact_data)
print("\n--- Reading Interchange ---")
for message in interchange.get_messages():
    for segment in message.segments:
        print(f"Segment tag: {segment.tag}, content: {segment.elements}")

# --- Creating an EDIFACT interchange ---
new_interchange = Interchange()
new_interchange.add_segment(Segment("UNA", [":", "+", ",", "?", " ", "'"])) # Optional, if custom control characters are needed
new_interchange.add_segment(Segment("UNB", ["UNOC:1", "SENDER", "RECEIVER", "20230101:1000", "REF123"]))
new_message = new_interchange.new_message("ORDER", "D", "96A", "UN")
new_message.add_segment(Segment("BGM", ["220", "ORDER123"]))
new_message.add_segment(Segment("DTM", ["137:20230101:1000"]))
new_interchange.add_message(new_message)

print("\n--- Serializing Interchange ---")
print(new_interchange.serialize(break_lines=True))

view raw JSON →