当前位置:首页 > 科技  > 软件

Python办公神器:教你使用 Python 批量整理通知文件

来源: 责编: 时间:2024-04-25 17:40:09 113观看
导读你是否遇到过这样的情况:你有一堆Word文件,每个文件都包含一些重要的信息,你需要把这些信息提取出来,整理到一个Excel表格中,方便查阅和管理。但是,手动打开每个文件,复制粘贴信息,又太费时费力,而且容易出错。有没有什么办法

你是否遇到过这样的情况:你有一堆Word文件,每个文件都包含一些重要的信息,你需要把这些信息提取出来,整理到一个Excel表格中,方便查阅和管理。但是,手动打开每个文件,复制粘贴信息,又太费时费力,而且容易出错。32o28资讯网——每日最新资讯28at.com

32o28资讯网——每日最新资讯28at.com

有没有什么办法可以让Python帮你自动完成这个任务呢?答案是肯定的!本文将教你如何用Python批量提取Word文件中的关键信息,并写入Excel文件中,只需几行代码,就可以节省大量的时间和精力。32o28资讯网——每日最新资讯28at.com

32o28资讯网——每日最新资讯28at.com

准备工作

在开始编写代码之前,我们需要先准备一些必要的工具和文件:32o28资讯网——每日最新资讯28at.com

  • Python环境:本文使用的是Python 3.8,你可以在下载安装。
  • openpyxl库:这是一个用于操作Excel文件的Python库,你可以使用pip install openpyxl命令安装。
  • python-docx库:这是一个用于操作Word文件的Python库,你可以使用pip install python-docx命令安装。
  • glob库:这是一个用于获取文件路径的Python库,一般已经内置在Python中,无需安装。
  • Word文件:这是我们要提取信息的源文件,本文以7个会议通知文件为例,每个文件都包含学习时间、学习内容、学习形式、主持人四项关键信息,文件名分别为会议通知1.docx,会议通知2.docx,...,会议通知7.docx,存放在Notice文件夹下。
  • Excel文件:这是我们要写入信息的目标文件,本文以一个空白的Excel文件为例,文件名为Meeting_temp.xlsx,存放在与Notice文件夹同一级的目录下。

获取文件路径

第一步,我们需要获取Notice文件夹下的所有Word文件的路径,这样我们才能对每个文件进行操作。这里我们可以使用glob库的glob函数,它可以根据通配符匹配文件路径,返回一个列表。例如,我们可以使用glob.glob('*.docx')来匹配当前目录下的所有以.docx结尾的文件。32o28资讯网——每日最新资讯28at.com

为了方便后续的操作,我们先定义一个变量path,表示我们的工作目录,也就是Notice文件夹和Excel文件所在的目录,你可以根据实际情况修改。然后,我们使用glob.glob(path + r'/Notice/*.docx')来获取Notice文件夹下的所有Word文件的路径,保存在一个变量files中。注意,这里我们使用了r字符串,表示原始字符串,不会对反斜杠进行转义。32o28资讯网——每日最新资讯28at.com

代码如下:32o28资讯网——每日最新资讯28at.com

import globpath = r'C:/Users/xxx' # 路径为Notice文件夹和Excel文件所在的目录,可按实际情况更改files = glob.glob(path + r'/Notice/*.docx') # 获取Notice文件夹下的所有Word文件的路径print(files) # 打印文件路径列表,检查是否正确

输出如下:32o28资讯网——每日最新资讯28at.com

['C://Users//xxx//Notice//会议通知1.docx', 'C://Users//xxx//Notice//会议通知2.docx', 'C://Users//xxx//Notice//会议通知3.docx', 'C://Users//xxx//Notice//会议通知4.docx', 'C://Users//xxx//Notice//会议通知5.docx', 'C://Users//xxx//Notice//会议通知6.docx', 'C://Users//xxx//Notice//会议通知7.docx']

解析Word文件

第二步,我们需要解析每个Word文件,获取需要的四个信息,即学习时间、学习内容、学习形式、主持人。这里我们可以使用python-docx库的Document类,它可以读取Word文件,并将其内容以段落(Paragraph)为单位进行划分。我们可以遍历每个段落,根据其文本内容,判断是否包含我们需要的信息,并提取出来。32o28资讯网——每日最新资讯28at.com

为了方便后续的操作,我们先定义一个变量number,表示序号,用于记录每个文件的顺序。然后,我们使用一个for循环,遍历files列表中的每个文件路径,使用Document类打开每个文件,保存在一个变量wordfile中。接着,我们定义一个空列表content_lst,用于存放学习内容,因为学习内容可能分散在多个段落中,我们需要将它们合并成一个字符串。然后,我们使用一个嵌套的for循环,遍历wordfile中的每个段落,根据其文本内容,判断是否包含我们需要的信息,并提取出来,保存在相应的变量中。具体的判断逻辑如下:32o28资讯网——每日最新资讯28at.com

  • 如果段落的文本以“学习时间:”开头,那么我们就提取其后面的部分,保存在一个变量study_time中。
  • 如果段落的文本以“主持人:”开头,那么我们就提取其后面的部分,保存在一个变量host中。
  • 如果段落的文本以“学习形式:”开头,那么我们就提取其后面的部分,保存在一个变量study_type中。
  • 如果段落的文本的长度大于等于2,且第一个字符是数字,第二个字符是中文顿号“、”,那么我们就认为这是学习内容的一部分,将其添加到content_lst中。

代码如下:32o28资讯网——每日最新资讯28at.com

from docx import Documentnumber = 0 # 定义一个变量,表示序号for file in files: # 遍历每个文件路径    wordfile = Document(file) # 打开每个文件    content_lst = [] # 定义一个空列表,用于存放学习内容    for paragraph in wordfile.paragraphs: # 遍历每个段落        if paragraph.text[0:5] == '学习时间:': # 如果段落的文本以“学习时间:”开头            study_time = paragraph.text[5:] # 提取其后面的部分,保存在study_time中        if paragraph.text[0:4] == '主持人:': # 如果段落的文本以“主持人:”开头            host = paragraph.text[4:] # 提取其后面的部分,保存在host中        if paragraph.text[0:5] == '学习形式:': # 如果段落的文本以“学习形式:”开头            study_type = paragraph.text[5:] # 提取其后面的部分,保存在study_type中        if len(paragraph.text) >= 2: # 如果段落的文本的长度大于等于2            if paragraph.text[0].isdigit() and paragraph.text[1] == '、': # 如果第一个字符是数字,第二个字符是中文顿号“、”                content_lst.append(paragraph.text) # 将其添加到content_lst中    content = ' '.join(content_lst) # 将content_lst中的元素用空格连接成一个字符串,保存在content中    print(study_time, content, study_type, host) # 打印提取的信息,检查是否正确

写入Excel文件

第三步,我们需要将提取的信息写入Excel文件中,这样我们就可以方便地查看和管理。这里我们可以使用openpyxl库的Workbook类和Worksheet类,它们可以创建和操作Excel文件和工作表。我们可以使用Workbook类的active属性,获取当前活动的工作表,保存在一个变量sheet中。然后,我们可以使用Worksheet类的cell方法,根据行号和列号,指定单元格,并给其赋值。32o28资讯网——每日最新资讯28at.com

为了方便后续的操作,我们先定义一个变量excel_file,表示我们要写入的Excel文件的路径,你可以根据实际情况修改。然后,我们使用Workbook类创建一个Excel文件对象,保存在一个变量wb中。32o28资讯网——每日最新资讯28at.com

接着,我们使用wb的active属性,获取当前活动的工作表,保存在一个变量sheet中。然后,我们使用sheet的cell方法,给第一行的每一列赋值,作为表头,分别是序号、学习时间、学习内容、学习形式、主持人。32o28资讯网——每日最新资讯28at.com

接下来,我们使用一个for循环,遍历files列表中的每个文件路径,使用Document类打开每个文件,保存在一个变量wordfile中。然后,我们使用和上一步相同的逻辑,提取每个文件中的四个信息,保存在相应的变量中。32o28资讯网——每日最新资讯28at.com

最后,我们使用sheet的cell方法,给每一行的每一列赋值,分别是序号、学习时间、学习内容、学习形式、主持人。注意,这里我们需要将序号加1,因为第一行已经被表头占用了。最后,我们使用wb的save方法,保存Excel文件。32o28资讯网——每日最新资讯28at.com

代码如下:32o28资讯网——每日最新资讯28at.com

from openpyxl import Workbookexcel_file = path + r'/Meeting_temp.xlsx' # 定义Excel文件的路径,可按实际情况更改wb = Workbook() # 创建一个Excel文件对象sheet = wb.active # 获取当前活动的工作表sheet.cell(row=1, column=1).value = '序号' # 给第一行第一列赋值,作为表头sheet.cell(row=1, column=2).value = '学习时间' # 给第一行第二列赋值,作为表头sheet.cell(row=1, column=3).value = '学习内容' # 给第一行第三列赋值,作为表头sheet.cell(row=1, column=4).value = '学习形式' # 给第一行第四列赋值,作为表头sheet.cell(row=1, column=5).value = '主持人' # 给第一行第五列赋值,作为表头for file in files: # 遍历每个文件路径    wordfile = Document(file) # 打开每个文件    content_lst = [] # 定义一个空列表,用于存放学习内容    for paragraph in wordfile.paragraphs: # 遍历每个段落        if paragraph.text[0:5] == '学习时间:': # 如果段落的文本以“学习时间:”开头            study_time = paragraph.text[5:] # 提取其后面的部分,保存在study_time中        if paragraph.text[0:4] == '主持人:': # 如果段落的文本以“主持人:”开头            host = paragraph.text[4:] # 提取其后面的部分,保存在host中        if paragraph.text[0:5] == '学习形式:': # 如果段落的文本以“学习形式:”开头            study_type = paragraph.text[5:] # 提取其后面的部分,保存在study_type中        if len(paragraph.text) >= 2: # 如果段落的文本的长度大于等于2            if paragraph.text[0].isdigit() and paragraph.text[1] == '、': # 如果第一个字符是数字,第二个字符是中文顿号“、”                content_lst.append(paragraph.text) # 将其添加到content_lst中    content = ' '.join(content_lst) # 将content_lst中的元素用空格连接成一个字符串,保存在content中    number += 1 # 将序号加1    sheet.cell(row=number+1, column=1).value = number # 给每一行第一列赋值,作为序号    sheet.cell(row=number+1, column=2).value = study_time # 给每一行第二列赋值,作为学习时间    sheet.cell(row=number+1, column=3).value = content # 给每一行第三列赋值,作为学习内容    sheet.cell(row=number+1, column=4).value = study_type # 给每一行第四列赋值,作为学习形式    sheet.cell(row=number+1, column=5).value = host # 给每一行第五列赋值,作为主持人wb.save(excel_file) # 保存Excel文件

完成任务

至此,我们已经完成了用Python批量提取Word文件中的关键信息,并写入Excel文件中的任务。你可以打开Meeting_temp.xlsx文件,查看结果,如下图所示:32o28资讯网——每日最新资讯28at.com

32o28资讯网——每日最新资讯28at.com

你可以看到,我们成功地将7个Word文件中的四个信息提取出来,并按照序号、学习时间、学习内容、学习形式、主持人的顺序,写入Excel文件中,方便查阅和管理。32o28资讯网——每日最新资讯28at.com

总结

本文教你如何用Python批量提取Word文件中的关键信息,并写入Excel文件中,只需几行代码,就可以节省大量的时间和精力。本文涉及到的主要技术点有:32o28资讯网——每日最新资讯28at.com

  • openpyxl库:用于操作Excel文件,可以创建、读取、写入、修改Excel文件和工作表。
  • python-docx库:用于操作Word文件,可以读取、写入、修改Word文件和段落。
  • glob库:用于获取文件路径,可以根据通配符匹配文件路径,返回一个列表。

本文链接:http://www.28at.com/showinfo-26-85540-0.htmlPython办公神器:教你使用 Python 批量整理通知文件

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C#读写 INI 文件的最简方法

下一篇: C# 读写 JSON 配置文件详解

标签:
  • 热门焦点
  • Automa-通过连接块来自动化你的浏览器

    Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 把LangChain跑起来的三个方法

    把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • K8S | Service服务发现

    K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 多线程开发带来的问题与解决方法

    多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 在线图片编辑器,支持PSD解析、AI抠图等

    在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • 虚拟键盘 API 的妙用

    虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 一个注解实现接口幂等,这样才优雅!

    一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
  • 英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    据10 月 30 日外媒 TheVerge 消息报道,英特尔 Xe HPG Arc Alchemist 的正面实被曝光,不仅拥有 512 EU 版显卡,还拥有 128EU 的单风扇版本。另外,这款显卡 PCB
Top