记录从系统下载来的入学申请表,提取家长信息。获取联系方式,以备不时之需。
实现以下需求:
1、仅提取关键信息,学生基本情况,家长基本情况
2、关键信息整合成TXT文件
3、文件名混乱,结合花名册,复制xls文件到新路径,以学号和名字的方式重命名。
import xlrd from openpyxl import load_workbook import os import shutil def read_all_xls(file_path): """ 读取xls文件全部内容,返回字典:{工作表名: 表格二维列表} """ workbook = xlrd.open_workbook(file_path) all_sheets_data = {} for sheet_name in workbook.sheet_names(): sheet_ = workbook.sheet_by_name(sheet_name) sheet_data = [] for row_idx in range(sheet_.nrows): row_values = sheet_.row_values(row_idx) sheet_data.append(row_values) all_sheets_data[sheet_name] = sheet_data workbook.release_resources() return all_sheets_data def write_txt_func_(file_name_): search_num_list_ = [5, 31, 18, 24] # ["姓名", '房产类别', '关 系'] # 5,31,18,24这几行往后数5行都是重要信息 save_i_list_ = [] # 要保存的信息放在此,有空值 output_list_ = [] # 要保存的信息放在此,无空值 try: data = read_all_xls(file_name_) for sheet, table in data.items(): # print(f"===== 工作表:{sheet} =====") id_ = data_.index(sheet) + 1 # 学生学号 for i in search_num_list_: for j in range(5): save_i_list_.append(table[i+j]) for inner_list_ in save_i_list_: new_lst = [x for x in inner_list_ if x is not None and str(x).strip() != ''] # 去除列表空值 output_list_.append(new_lst) with open(f"{id_} {sheet}.txt", "w", encoding="utf-8") as f: # sheet为学生姓名 for item in output_list_: f.write(f"{item}\n") f.write("\n") return f"{id_} {sheet}" except FileNotFoundError: print(f"错误:找不到文件 {file_name_},请检查文件路径是否正确!") except Exception as e: print(f"读取失败:{str(e)}") if __name__ == "__main__": wb = load_workbook("花名册.xlsx", data_only=True) ws = wb.active data_ = [row[0] for row in ws.iter_rows(values_only=True)] out_dir = "output" os.makedirs(out_dir, exist_ok=True) # 1. 创建output文件夹,不存在则新建 for i in range(39): name_ = write_txt_func_(f'入学申请表20250830 ({i+1}).xls') dst_path = os.path.join(out_dir, f"{name_}.xls") shutil.copy2(f'入学申请表20250830 ({i+1}).xls', dst_path)