* dict(字典) 与 list(列表) 的结合使用,主要目的是想存储表的基本信息及该表所在 excel 中的行记录。 1、手动测试部分 dic = {'T05_DEP_ACCT_OPEN_CLOSE_BK1': ['T05_DEP_ACCT_OPEN_CLOSE_BK1', '存款开销户登记簿', '存款开销户登记簿', 2], 'T05_DEP_ACCT_OPEN_CLOSE_BK2': ['T05_DEP_ACCT_OPEN_CLOSE_BK2', '存款开销户登记簿', '存款开销户登记簿', 32]} list = [2, 32, 62] print(list[1]) for i in enumerate(dic): key = i[1] sub_list = dic[key] sub_list.append(list[i[0]+1]) dic[key] = sub_list print(dic) 2、测试后放入正式代码中,具体如下: current_path = os.path.abspath('.').replace('\\', '/') dir_mapping = current_path + '/mapping/latest/'
def func_mapping_hand(): mapping_names = os.listdir(dir_mapping) for mapping_name in mapping_names: sys_name_mapping = mapping_name.split('.')[0] resource_trans_file_mapping = dir_mapping + mapping_name result_trans_file = dir_resource + sys_name_mapping + '.xlsx' Model.func_createWorkbook(result_trans_file) workbook_mapping = xlrd.open_workbook(resource_trans_file_mapping) worksheet_mapping = workbook_mapping.sheet_by_name(u'宽表模型字段级') max_rows = worksheet_mapping.nrows mapping_list = [] dic = {} n = 1 for row_i in range(worksheet_mapping.nrows): cell_value = str(worksheet_mapping.cell(row_i, 3).value).strip() if cell_value == '银行号': tab_en_name = str(worksheet_mapping.cell(row_i, 0).value).strip() + str(n) tab_ch_name = str(worksheet_mapping.cell(row_i, 1).value).strip() tab_desc = str(worksheet_mapping.cell(row_i, 1).value).strip() mapping_list.append(row_i) # 基础信息 tab_en_name:表英文名, tab_ch_name:表中文名, tab_desc:表描述, st_row:开始行, end_row:结束行 st_row = row_i dic[tab_en_name] = [tab_en_name, tab_ch_name, tab_desc, st_row] n += 1 mapping_list.append(max_rows) for i in enumerate(dic): key = i[1] sub_list = dic[key] sub_list.append(mapping_list[i[0] + 1]) dic[key] = sub_list for sub_dic in dic: mapping_sheet_name = sub_dic # 转换表,将逻辑映射转为物理映射 worksheet_trans0 = wb0.Worksheets('trans_model') workbook_trans2 = excel.Workbooks.Open(result_trans_file) worksheet_trans2 = workbook_trans2.Worksheets("Sheet") Model.func_trans(ws0=worksheet_trans0, wb2=workbook_trans2, ws2=worksheet_trans2, sheet_name=mapping_sheet_name) worksheet_trans2.Delete() workbook_trans2.Save() workbook_trans2.Close()