在 Python 中读写 KiCAD 库
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):
# 记录是 '$CMP ...' 行和 '$ENDCMP' 行之间的所有内容
records = []
current_record = None
for line in file:
line = line.strip()
if line.startswith('$CMP '):
current_record = []
# 如果我们有任何当前记录则将行添加到记录
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):
# 写入头
out.write("EESchema-DOCLIB Version 2.0\n")
# 写入记录
for rec in self.records:
out.write("#\n")
for line in rec:
out.write(line)
out.write("\n")
# 写入页脚
out.write("#\n#End Doc Library\n")
class KiCADSchematicSymbolLibrary(object):
def __init__(self, records=[]):
self.records = records
@staticmethod
def read(file):
# 记录是 'DEF ...' 行和 'ENDDEF' 行之间的所有内容
records = []
current_record = None
current_comment_lines = [] #
for line in file:
line = line.strip()
if line.startswith("#encoding"):
continue # 忽略 - 我们始终使用 #encoding utf-8
# 注释行处理
if line.startswith("#"):
current_comment_lines.append(line)
# 记录开始
if line.startswith('DEF '):
current_record = current_comment_lines
current_comment_lines = []
# 如果我们有任何当前记录则将行添加到记录
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
# 清除注释行
# 我们只能现在这样做以避免在之前清除它们
# 它们在 DEF 子句中使用
if not line.startswith("#"):
current_comment_lines = []
return KiCADSchematicSymbolLibrary(records)
def write(self, out):
# 写入头
out.write("EESchema-LIBRARY Version 2.4\n#encoding utf-8\n")
# 写入记录
for rec in self.records:
for line in rec:
out.write(line)
out.write("\n")
# 写入页脚
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