将清单中的"元件值\t元件位号"分裂为"元件位号\t元件值",每个元件一行
2014-09-19 20:18
253 查看
在BOM中,清单的格式一般有物料编码,物料描述,元件位号,元件数量,将物料描述简化成一个值,再将这列与元件位号列提取出来,保存到"value+refs.txt"文件中,格式为
元件值\t位号1 位号2 ... 位号n 位号之间的分隔符为1个空格
将下面的脚本复制,保存为"reflist.py"文件,与"value+refs.txt"文件放在同一目录中,操作系统中要先安装有python2(python3未验证),运行此脚本,就会将"value+refs.txt"中的元件按第行一个的格式排列,输出"reflist.txt"文件,此文件就可以直接用作loadBomValue2PCB.bas的输入,将清单中的值导入到PCB中
元件值\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()
相关文章推荐
- 一个错误"索引期间字段权重如果每个文档都设置的话,是值得的"
- "每个Y的最新X"算法,not exists妙用
- "通常每个套接字地址(协议/网络地址/端口)只允许使用一次"
- 一行代码实现星级评分 "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate);
- "空格在每个浏览器中显示的距离都不一样"的解决办法
- "无法在证书存储区中找到清单签名证书"的解决办法
- 请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用"6.2f"格式输出。
- 电子元件资料里管脚的"active low","active high"是什么意思?
- android 导出每个号码的最新的短信记录(巧用SQL语句的"--"注释符)
- .Net Remoting 实现简易的"命令行控制台"聊天室
- "陷阱"技术探秘 ──动态汉化Windows技术的分析
- ASP+JS时的"""
- "[转]以下一些使用ASP.NET和VS.NET2003的经验和技巧," 一文的评论:
- Net Remoting 实现简易的"命令行控制台"聊天室 选择自 playyuer 的 Blog
- 两个数据库间的"复制"
- "游泳和CMM" "swimming & CMM"
- 屏幕的"拍照"
- "BOF或EOF中有一个是真,或者当前的记录已被删除,所需的操作要求一个当前的记录"问题解决
- 关于icewm的"运行命令"
- vs.net2003的"VC软件包不可用或未注册"的提示