import pandas as pd
import time
import os
from pystdf.Importer import STDF2DataFrame
import pystdf.V4 as V4
def process_to_color():
df_mir = pd.read_excel(read_file, sheet_name='MIR')
df_sbr = pd.read_excel(read_file, sheet_name='SBR')
# print(df_mir.columns)
part_type = df_mir['RART_TYP'].values[0]
process = df_mir['TEST_COD'].values[0]
test_program = df_mir['SPEC_NAM'].values[0]
color = ''
sbin_names = []
for idx, rows in df_sbr.iterrows():
sbin_num = rows['SBIN_NUM']
sbin_nam = rows['SBIN_NAM']
if sbin_nam in sbin_names:
continue
sbin_names.append(sbin_nam)
project_type = 1
to_line = [sbin_num, sbin_nam, project_type, part_type, process, test_program, color]
to_color_datas.append(to_line)
def process_devices():
df_mir = pd.read_excel(read_file, sheet_name='MIR')
df_prr = pd.read_excel(read_file, sheet_name='PRR')
df_wir = pd.read_excel(read_file, sheet_name='WIR', converters={'WAFER_ID': str})
lot_id = df_mir['LOT_ID'].values[0]
wafer_id = df_wir['WAFER_ID'].values[0]
flow_id = df_mir['FLOW_ID'].values[0]
sblot_id = df_mir['SBLOT_ID'].values[0]
program = df_mir['SPEC_NAM'].values[0]
ending_time = df_mir['START_T'].values[0]
time_array = time.localtime(ending_time)
ending_time = time.strftime("%Y-%m-%d %H:%M:%S", time_array)
if 'P1' in flow_id:
retest = 0
else:
retest = flow_id.strip('R')
for idx, rows in df_prr.iterrows():
locate_x = rows['X_COORD']
locate_y = rows['Y_COORD']
t_time = rows['TEST_T']
soft_bin = rows['SOFT_BIN']
hard_bin = rows['HARD_BIN']
part_id = rows['PART_ID']
site_num = rows['SITE_NUM']
to_line = [lot_id + '#' + str(wafer_id), locate_x, locate_y, retest, t_time, soft_bin, hard_bin, sblot_id,
part_id, site_num, program, ending_time]
to_devices_datas.append(to_line)
def process_to_fixed():
df_mir = pd.read_excel(read_file, sheet_name='MIR')
df_wrr = pd.read_excel(read_file, sheet_name='WRR')
df_wir = pd.read_excel(read_file, sheet_name='WIR', converters={'WAFER_ID': str})
lot_id = df_mir['LOT_ID'].values[0]
wafer_id = df_wir['WAFER_ID'].values[0]
sblot_id = df_mir['SBLOT_ID'].values[0]
part_type = df_mir['RART_TYP'].values[0]
ending_time = df_mir['START_T'].values[0]
time_array = time.localtime(ending_time)
ending_time = time.strftime("%Y-%m-%d %H:%M:%S", time_array)
node_name = df_mir['NODE_NAM'].values[0]
spec_name = df_mir['SPEC_NAM'].values[0]
test_cod = df_mir['TEST_COD'].values[0]
tst_temp = df_mir['TST_TEMP'].values[0]
flow_id = df_mir['FLOW_ID'].values[0]
for idx, rows in df_wrr.iterrows():
part_cnt = rows['PART_CNT']
good_cnt = rows['GOOD_CNT']
to_line = [read_file, ending_time, lot_id + '#' + str(wafer_id), sblot_id, sblot_id,
part_type, part_cnt, part_cnt, 'null', node_name,
spec_name, test_cod, tst_temp, flow_id, 'null', 'null', 'null', 'F1', wafer_id, good_cnt]
to_fixed_datas.append(to_line)
def process_to_parameter():
df_mir = pd.read_excel(read_file, sheet_name='MIR')
df_ptr = pd.read_excel(read_file, sheet_name='PTR')
part_type = df_mir['RART_TYP'].values[0]
test_code = df_mir['TEST_COD'].values[0]
spec_name = df_mir['SPEC_NAM'].values[0]
test_num_list = []
for idx, rows in df_ptr.iterrows():
test_txt = rows['TEST_TXT']
lo_limit = rows['LO_LIMIT']
hi_limit = rows['HI_LIMIT']
units = rows['UNITS']
test_num = rows['TEST_NUM']
if test_num in test_num_list:
continue
test_num_list.append(test_num)
to_line = ['I', part_type, test_code, test_txt, lo_limit, hi_limit, units, test_num, spec_name, idx + 1, '', 1]
to_parameter_datas.append(to_line)
def process_to_other():
df_mir = pd.read_excel(read_file, sheet_name='MIR')
df_prr = pd.read_excel(read_file, sheet_name='PRR')
df_wir = pd.read_excel(read_file, sheet_name='WIR', converters={'WAFER_ID': str})
df_ptr = pd.read_excel(read_file, sheet_name='PTR')
lot_id = df_mir['LOT_ID'].values[0]
wafer_id = df_wir['WAFER_ID'].values[0]
sblot_id = df_mir['SBLOT_ID'].values[0]
spec_name = df_mir['SPEC_NAM'].values[0]
flow_id = df_mir['FLOW_ID'].values[0]
if 'P1' in flow_id:
retest = 0
else:
retest = flow_id.strip('R')
ending_time = df_mir['START_T'].values[0]
time_array = time.localtime(ending_time)
ending_time = time.strftime("%Y-%m-%d %H:%M:%S", time_array)
start = 0
ti = 0
t_dict = {}
ptr_data = []
for idx, rows in df_prr.iterrows():
x_coord = rows['X_COORD']
y_coord = rows['Y_COORD']
num_test = rows['NUM_TEST']
if idx == 0:
if str(rows['PART_ID']) != '1':
site_num = rows['SITE_NUM']
for ptr_idx, ptr_rows in df_ptr.iterrows():
site_num_2 = ptr_rows['SITE_NUM']
test_txt = ptr_rows['TEST_TXT']
print(test_txt, idx, site_num, site_num_2, site_num == site_num_2)
if site_num == site_num_2:
t_dict[ptr_rows['TEST_NUM']] = test_txt
continue
else:
ptr_data.append([t_dict[ptr_rows['TEST_NUM']], ptr_rows['RESULT']])
else:
for ptr_idx, ptr_rows in enumerate(ptr_data):
if ptr_idx < start or ptr_idx >= start + num_test:
continue
test_txt = ptr_rows[0]
result = ptr_rows[1]
to_line = [lot_id + '#' + str(wafer_id), x_coord, y_coord, retest,
test_txt, result, spec_name, sblot_id, ending_time]
to_other_datas.append(to_line)
start += num_test
def toExcel(path):
lists = os.listdir(path)
Files = []
for fileList in lists:
if os.path.splitext(fileList)[1].upper() == '.STD':
Files.append(fileList)
elif os.path.splitext(fileList)[1].upper() == '.STDF':
Files.append(fileList)
for file in Files:
fin = path + '/' + file
fout = fin[:fin.rfind('.') + ".xlsx"]
dfs = STDF2DataFrame(fin)
writer = pd.ExcelWriter(fout)
for k, v in dfs.items():
# k为sheet名,v是dataframe数据内容
record = [r for r in V4.records if r.__class__.__name__.upper() == k]
if len(record) == 0:
print('*****')
else:
columns = [field[0] for field in record[0].fieldMap]
v.to_excel(writer, sheet_name=k, columns=columns, index=False, na_rep="N/A")
writer.save()
if __name__ == "__main__":
path = ''
color_out_file = 'Color_V2.xlsx'
devices_out_file = 'Devices_V2.xlsx'
fixed_out_file = 'Devices_Fixed_Item_V2.xlsx'
other_out_file = 'Devices_Other_Item_V2.xlsx'
parameter_out_file = 'Parameter_V2.xlsx'
lists = os.listdir(path)
files = []
for fileList in lists:
if '.' in fileList:
files.append(fileList)
to_color_datas = []
to_devices_datas = []
to_fixed_datas = []
to_other_datas = []
to_parameter_datas = []
for file in files:
read_file = os.path.join(path, file)
process_to_color()
process_devices()
process_to_fixed()
process_to_other()
process_to_parameter()
columns = ['SOFT_BIN', 'BIN_NAME', 'PROJECT_TYPE', 'PART_NO', 'PROCESS', 'TEST_PROGRAM', 'COLOR']
out_df = pd.DataFrame(to_color_datas, columns=columns)
out_df.to_excel(color_out_file, index=None)
columns = ['Wafer_id', 'Locate_X', 'Locate_Y', 'Retest', 'T_Time', 'Soft_Bin', 'Hard_Bin', 'lot_id',
'part_id', 'site_num', 'Program', 'Ending_Time']
out_df = pd.DataFrame(to_devices_datas, columns=columns)
out_df.to_excel(devices_out_file, index=None)
columns = ['File_name', 'Ending_time', 'Wafer_id', 'lot_id', 'C_lot', 'Part_no', 'Records', 'Insert_num',
'Update_num', 'Machine_Name', 'Program', 'Step', 'Tempreature', 'FLOW', 'PARA_RECORDS',
'PARA_INSERT', 'PARA_UPDATE', 'VENDOR', 'RAW_WAFERID', 'PASS_DIE']
out_df = pd.DataFrame(to_fixed_datas, columns=columns)
out_df.to_excel(fixed_out_file, index=None)
columns = ['wafer_id', 'Locate_X', 'Locate_Y', 'Retest', 'Test_Name', 'Value', 'Program', 'Lot_id', 'Ending_time']
out_df = pd.DataFrame(to_other_datas, columns=columns)
out_df.to_excel(other_out_file, index=None)
columns = ['PROJECT_TYPE', 'PART_NO', 'PROCESS', 'PARAMETER', 'LIMIT_L', 'LIMIT_H', 'UNIT', 'TEST_NUM',
'TEST_PROGRAM', 'PARAMETER_ID', 'DISPLAY_UNIT', 'IS_CHART']
out_df = pd.DataFrame(to_parameter_datas, columns=columns)
out_df.to_excel(parameter_out_file, index=None)
多文件处理
于 2022-02-09 12:03:36 首次发布