KiCAD-Bibliotheken in Python lesen und schreiben

English Deutsch
kicad_lib_parser.py
__author__ = "Uli Köhler"
__license__ = "CC0 1.0 Universal"

class KiCADDocLibrary(object):
    def __init__(self, records=[]):
        self.records = records

    @staticmethod
    def read(file):
        # Ein Datensatz ist alles zwischen der '$CMP ...'-Zeile und der '$ENDCMP'-Zeile
        records = []
        current_record = None
        for line in file:
            line = line.strip()
            if line.startswith('$CMP '):
                current_record = []
            # Zeile zum Datensatz hinzufügen, wenn ein aktueller Datensatz vorhanden ist
            if current_record is not None:
                current_record.append(line)
            if line.startswith("$ENDCMP"):
                if current_record is not None:
                    records.append(current_record)
                    current_record = None
        return KiCADDocLibrary(records)

    def write(self, out):
        # Header schreiben
        out.write("EESchema-DOCLIB  Version 2.0\n")
        # Datensätze schreiben
        for rec in self.records:
            out.write("#\n")
            for line in rec:
                out.write(line)
                out.write("\n")
        # Footer schreiben
        out.write("#\n#End Doc Library\n")


class KiCADSchematicSymbolLibrary(object):
    def __init__(self, records=[]):
        self.records = records

    @staticmethod
    def read(file):
        # Ein Datensatz ist alles zwischen der 'DEF ...'-Zeile und der 'ENDDEF'-Zeile
        records = []
        current_record = None
        current_comment_lines = [] #
        for line in file:
            line = line.strip()
            if line.startswith("#encoding"):
                continue # Ignorieren - wir verwenden immer #encoding utf-8
            # Kommentarzeilen-Verarbeitung
            if line.startswith("#"):
                current_comment_lines.append(line)
            # Beginn des Datensatzes
            if line.startswith('DEF '):
                current_record = current_comment_lines
                current_comment_lines = []
            # Zeile zum Datensatz hinzufügen, wenn ein aktueller Datensatz vorhanden ist
            if current_record is not None:
                current_record.append(line)
            if line.startswith("ENDDEF"):
                if current_record is not None:
                    records.append(current_record)
                    current_record = None
            # Kommentarzeilen löschen
            # Wir können dies erst jetzt tun, um zu vermeiden, dass sie gelöscht werden,
            # bevor sie in der DEF-Klausel verwendet werden
            if not line.startswith("#"):
                current_comment_lines = []
        return KiCADSchematicSymbolLibrary(records)

    def write(self, out):
        # Header schreiben
        out.write("EESchema-LIBRARY Version 2.4\n#encoding utf-8\n")
        # Datensätze schreiben
        for rec in self.records:
            for line in rec:
                out.write(line)
                out.write("\n")
        # Footer schreiben
        out.write("#\n#End Library\n")

Check out similar posts by category: Electronics, KiCAD