最近工作遇到的一个问题:
有两份map文件,一份是电性测试数据的map文件,一份是出货前外观检的map文件如下:
image.png
image.png
电性map文件只有电性失效,而没有外观检失效,而外观检也没有CP失效的信息,但生产是需要两个都pass的芯片,因此需求是把外观检测失效的芯片,在CP map文件里集合,保证最终封装的芯片都是电性与外观检测都通过的芯片;刚面对这两个文件头很大,找不到思路,因为两个map的文件形式完全不一样,首先试着用python读取了一下数据:
image.png
尝试分析了一下数据形式,每颗芯片占据2个字符(空位),每颗芯片用一个空位间隔,为了提取每一行的有效信息,尝试用了python切片功能
image.png
可以看到设置取值范围为[i: i+2](取连续两位),循环范围为从第6位开始,到整行文本结束位置前一位(因为最后是换行符,不需要)
根据上面的方法,对外观检测异常的map进行分析,也执行了相同操作:

image.png
通过这两次操作,就可以获得原始数据的关键信息,并以相同的格式存储
image.png image.png
格式一致后,后面就好办了,加入需求的判断逻辑,再把两个数据merge一起即可:
image.png
最终的效果如上,最后就是把merge好的数据,写回电性失效的文件就可以了,这个任务算是最终完成:
image.png
最后的代码放在文末:

 map_file_path = r'D:xxxxx'
 map_file_path2 = r'D:xxxxxx'

with open(map_file_path) as f:
    raw_list = f.readlines()

with open(map_file_path2) as f2:
    raw_list2 = f2.readlines()

#format treat

new_list = []
for t in range(66,85):
    new = [raw_list[t][i:i+2] for i in range(6,len(raw_list[t]),3)]
    new_list.append(new)

new_list2 = []
for t in range(12,31):
    new = [raw_list2[t][i:i+3] for i in range(8,len(raw_list2[t]),4)]
    new_list2.append(new)

#merge
new_list_1 = []
for n in range(0,19):
    new_list_11=[]
for value1,value2 in zip(new_list[n],new_list2[n]):
if value1 == ' 1' and value2 != '001':
            new_list_11.append('44')
else:
             new_list_11.append(value1)
    new_list_1.append(' '.join(new_list_11))
#modify raw list
for arrow in range(0,len(new_list_1)):
    raw_list[arrow+66] = raw_list[arrow+66][:6] + new_list_1[arrow] + raw_list[arrow+66][len(raw_list[arrow+66])-1:]

with open(map_file_path, 'w') as wr_new:
for l in raw_list:

        wr_new.write(l)