记录从系统下载来的入学申请表,提取家长信息。获取联系方式,以备不时之需。
实现以下需求:
1、仅提取关键信息,学生基本情况,家长基本情况
2、关键信息整合成TXT文件
3、文件名混乱,结合花名册,复制xls文件到新路径,以学号和名字的方式重命名。
python
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)