当前位置: 首页 > news >正文

怎么从休学证明中取出休学原因(python自动化办公,涉及word和excel)

怎么从休学证明中取出休学原因(python自动化办公,涉及word和excel)

本代码偏向处理高校教务处的工作

休学或请假模板如下:

                                         休学证明(此联存教务办)编号:休202323
计算机系23级计算机科学与技术本科专业学生5-StarrySky,不男不女,因自身原因,从2023年9月至2027年9
月休学。复学时持复学申请和休学证明及休学期间所在单位开具的无违法乱纪行为证明办理复学手续。复学
后编入2027级同专业就读。若逾期两周不办理复学手续,将做自动退学处理。CSDN大学教务办
2023年11月12日

需求说明:

1.首先从excel中取出需要休学的姓名
2.然后利用得到姓名去word文件进行匹配
3.最后通过观察发现,休学原因,在'因'和','之间,所以我们这样去取我们想要的数据

代码如下:

		import re# 从表格文件中提取姓名数据table_data = pd.read_excel("休学名单.xls")# names = table_data["XM"]# 从表格文件中提取姓名数据names = table_data["XM"]# 提取 Word 文档中的文本text = docx2txt.process("休学证明.docx")# 创建一个字典来存储姓名和对应的请假原因name_reason_dict = {}for name in names:found = Falsereason = None# 在提取的文本中搜索姓名if name in text:# 查找姓名出现的最后一次位置name_position = max([m.start() for m in re.finditer(name, text)])# 查找 "因" 和截取到 "," 之前的文本match = re.search(r'因(.*?),', text[name_position:])if match:reason = match.group(1)found = Trueif found:# 使用姓名作为键,保存最后一个匹配到的原因name_reason_dict[name] = reason# 打印姓名和对应的请假原因for name, reason in name_reason_dict.items():print(f"姓名: {name}, 请假原因: {reason}")df = DataFrame(list(name_reason_dict.items()), columns=['XM', 'XXYY'])df.to_excel("休学证明.xlsx")

重要知识点补充

docx2txt:
将docx文件转换为txt格式的模块
能够直接读取docx文档并将其中的文本部分剥离出来的简单工具re.finditer:
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
参数	描述
pattern	匹配的正则表达式
string	要匹配的字符串。
flags	标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志
* 字符匹配
实例	描述
python	匹配 "python" 参考网址:https://www.runoob.com/python/python-reg-expressions.htmlmax([m.start() for m in re.finditer(name, text)])
这行代码是使用 Python 的正则表达式模块(re)来在文本字符串 text 中查找所有匹配 name 的位置,并返回其中最
大的位置。
具体解释如下:
re.finditer(name, text):这部分使用 re.finditer() 函数来查找在 text 中所有匹配 name 的位置。finditer() 返回一个迭
代器,迭代器的每个元素是一个包含匹配的相关信息的 Match 对象。
[m.start() for m in ...]:这部分是一个列表推导式,它遍历 re.finditer() 返回的 Match 对象列表,对于每个 Match 对
象 m,取其匹配的开始位置 m.start()。
max([...]):最后,max() 函数用来从位置列表中找到最大的位置。match = re.search(r'因(.*?),', text[name_position:])
这行代码使用正则表达式来搜索文本中以指定字符串 "因" 开头并以逗号 "," 结尾的文本段。
具体解释如下:
re.search(pattern, text):这部分使用 re.search() 函数来在文本字符串 text 中搜索与正则表达式 pattern 匹配的部
分。pattern 是正则表达式模式,text 是要搜索的文本。
r'因(.*?),':这是正则表达式模式。它的含义是:
因:匹配字面字符串 "因"。
(.*?):这是一个非贪婪捕获组,它会匹配任意字符(.)零次或多次(*),使匹配最短(非贪婪)。
,:匹配字面字符串 ","。
text[name_position:]:这部分是对 text 字符串的切片操作,从 name_position 位置开始提取子字符串。list(name_reason_dict.items()): 这部分将字典 name_reason_dict 中的键值对转换为一个列表,其中每个元素是一个
元组,元组的第一个元素是姓名 'XM',第二个元素是请假原因 'XXYY'。这个列表看起来像下面这样
[('姓名1', '请假原因1'), ('姓名2', '请假原因2'), ('姓名3', '请假原因3'), ...]
columns=['XM', 'XXYY']: 这是在创建 DataFrame 时指定的列名。DataFrame 的第一列将命名为 'XM',第二列将命
名为 'XXYY',这与字典中的键对应。所以,在 DataFrame 中,第一列将包含姓名,第二列将包含请假原因。match 是一个 Python 正则表达式匹配对象,它包含了与正则表达式匹配的文本的详细信息。
reason = match.group(1):用于从正则表达式匹配中获取文本中的具体部分。在这个特定的情况下,match 对象表
示一个成功的正则表达式匹配,group(1) 用于提取匹配中的第一个捕获组(通常由括号包围的部分)。在你的情况
下,正则表达式是 '因(.*?),',其中 (.*?) 表示一个捕获组,它将匹配 "因" 和 "," 之间的任何文本。
参考链接:https://blog.csdn.net/m0_37360684/article/details/84140403
http://www.lryc.cn/news/210375.html

相关文章:

  • C语言 定义一个函数,并调用,该函数中打印显示直角三角形
  • Doceker-compose——容器群集编排管理工具
  • Redis 与 MySQL 一致性 实现方案
  • 运维 | 使用 Docker 安装 Jenkins | Jenkins
  • linux-磁盘应用
  • java版直播商城平台规划及常见的营销模式 电商源码/小程序/三级分销+商城免费搭建
  • 软考高级之系统架构师之软件工程
  • SpringBoot集成与应用Neo4j
  • 做人,不一定要风风光光,但一定要堂堂正正。处事,不一定要尽善尽美,但一定要问心无愧。
  • 51单片机实验:数码管动态显示00-99
  • 【教3妹学编程-java实战5】结构体字段赋值的几种方式
  • 阿里蚂蚁淘宝等多次一面面试面经
  • UE4 中可全局获取的变量(例如游戏实例、玩家控制器等) 详解
  • c#使用ExifLib库提取图像的相机型号、光圈、快门、iso、曝光时间、焦距信息等EXIF信息
  • C++入门05—指针
  • Go学习第十六章——Gin文件上传与下载
  • 2.MySQL的调控按钮——启动选项和系统变量
  • 故障诊断模型 | Maltab实现CNN卷积神经网络故障诊断
  • qt高精度定时器的使用停止线程应用
  • Spring Boot Actuator 介绍
  • 【MATLAB】安装Psychtoolbox
  • 【Python机器学习】零基础掌握GradientBoostingClassifier集成学习
  • RFNet模型数据集采集处理流程
  • sql-50练习题6-10
  • 【刷题宝典NO.1】
  • 如何在深度学习领域取得个人的成功
  • 数据结构【DS】B树
  • Chatgpt网页版根据关键词自动批量写原创文章软件【可多开自动登录切换gpt账号】
  • 研发效能认证学员作品:快速进行持续集成应用实践丨IDCF
  • 中文编程开发语言工具系统化教程零基础入门篇和初级1专辑课程已经上线,可以进入轻松学编程