将清单中的"元件值\t元件位号"分裂为"元件位号\t元件值",每个元件一行

本文介绍了一款Python脚本,用于处理物料清单(BOM)文件。该脚本能将BOM文件中的物料值和元件位置信息转换为适用于PCB的设计格式,并支持元件位置范围的展开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在BOM中,清单的格式一般有物料编码,物料描述,元件位号,元件数量,将物料描述简化成一个值,再将这列与元件位号列提取出来,保存到"value+refs.txt"文件中,格式为

元件值\t位号1 位号2 ... 位号n    位号之间的分隔符为1个空格

将下面的脚本复制,保存为"reflist.py"文件,与"value+refs.txt"文件放在同一目录中,操作系统中要先安装有python2(python3未验证),运行此脚本,就会将"value+refs.txt"中的元件按第行一个的格式排列,输出"reflist.txt"文件,此文件就可以直接用作loadBomValue2PCB.bas的输入,将清单中的值导入到PCB中


#!/usr/bin/python
debug=1
logfile="./python_debug.txt"

#将"C11-14"转换成"C11,C12,C13,C14"
def expandref(inputstr,divider):
    #result_list.extend("abc")=> ['a','b','c']
    f=open(logfile,'w')
    if debug==1:
        f.write("expandref() get input: "+ inputstr + "\n")
    position=inputstr.find(divider)
    if position==-1:
        return [inputstr]
    str1=inputstr[:position]
    str2=inputstr[position+1:]
    # get ref prefix in str1
    i=0
    while str1[i].isalpha():
        i=i+1
        if i>=len(str1):
            return [inputstr]
    prefix1=str1[:i]
    # get the start number of ref
    numstart=str1[i:]
    if numstart.isdigit():
        numstart=int(numstart)
    else:
        return [inputstr]
    if debug==1:
        f.write("expandref(): prefix "+ prefix1 + "\n")
        f.write("expandref(): numstart "+ str(numstart) + "\n")
    # get the end number of ref
    if str2.isdigit():
        numend=int(str2)
    elif str2[:i]==prefix1 and str2[i-1:].isdigit():
        numend=int(str2)
    else:
        return [inputstr]
    if debug==1:
        f.write("expandref(): numend "+ str(numend) + "\n")
    if numend<=numstart:
        return [inputstr]
    ref_l=[]
    for i in range(numstart,numend+1):
        ref_l.append(prefix1+str(i))
    f.close()
    return ref_l

def expandrefString(refstring,refdivider,expandseperator):
    reflist=refstring.strip(refdivider).split(refdivider)
    returnlist=[]
    for ref in reflist:
        if ref=='':
            continue
        returnlist.extend(expandref(ref,expandseperator))
    return returnlist

''' read value+refs.txt file,format like
    "
    10nF	C12 C13
    "
    and print to be like
    "
    C12	10nF
    C13	10nF
    "
    '''

inputfile="./value+refs.txt"
outputfile="./reflist.txt"
fin=open(inputfile,'r')
fout=open(outputfile,'w')

seperator='\t'
refSeperator=' '
for line in fin.readlines():
    line=line.strip('\r\n').strip('\n').strip(' ').strip('\t')
    length=len(line)
    if(length==0):
        continue
    sepPositioin=line.find(seperator)
    valueStr=line[:sepPositioin]
    refList=expandrefString(line[sepPositioin+1:],' ','-')
    print("reflist: "+str(refList))
    for ref in refList:
        fout.write(ref+seperator+valueStr+"\n")


fin.close()
fout.close()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值