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
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow