用 Python 写几行代码,一分钟搞定一天工作量,同事直呼:好家伙!

135 篇文章 1 订阅
133 篇文章 0 订阅

前几天有一个读者说最近要整理几千份文件,头都要整秃了,不知道能不能用 Python 解决,我们来看一下,你也可以思考一下。

由于涉及文件私密所以具体内容已做脱敏处理。

大概是这样,一个文件夹下有多份会议通知信息(本文以 7 份文件为例)

每一份通知打开格式基本类似,如下所示👇

现在需要将每份会议文档中的 学习时间、学习内容、学习形式、主持人 四项关键信息提取出来,整理到 Excel 表格中:

在他真实需求中,会议通知四年积累下来有快 1000 份(四年开了这么多次会也是很厉害…),用人力挨个打开文件并录到 Excel 中工作量实在太大。

好家伙,这种重复的无聊工作, 不就是一份非常适合交给 Python 的自动化工作吗?我不允许我的粉丝还不会!

下面我们来看看如何用 Python 解决这个问题,主要将涉及:

  • openpyxl 写入 Excel 文件
  • python-docx 读取 Word 文件
  • glob 批量获取文件路径

为了简化上面的需求,本文中需要获取的会议通知文件一共 7 个,分别命名为 会议通知1.docx 会议通知2.docx会议通知7.docx,存放在 Notice 文件夹下。输出的目标 Excel 文件命名为 Meeting_temp.xlsx

基本逻辑

写代码之前都先明确完整的问题需要分为几个小步骤实现。从需求中我们大概可以将代码分为以下几步:

  • 获取会议通知 Notice 文件夹下的所有文件;
  • 解析每一份 Word 文件,获取需要的四个信息,输出到 Excel 中;
  • 保存 Excel 文件

有了逻辑就有了写代码的思路了。第 1 步可以由 glob 库完成,后面两步就是操作 Word 的 python-docx 库和操作 Excel 的 openpyxl 库的交互协作了。

这两个库我们都有说过,如果你不熟悉,一定要先阅读下面的文章!

代码实现

首先导入需要的库:

from docx import Document
from openpyxl import load_workbook
import glob

将模板 Excel 读取进程序:

path  = r'C:\Users\xxx' # 路径为会议通知文件夹和 Excel 模板所在的位置,可按实际情况更改
workbook = load_workbook(path + r'\Meeting_temp.xlsx')
sheet = workbook.active

写任何批处理的代码之前都建议先写一下单次操作的代码,因此我们先完成对 会议通知 1.docx 文件的解析,确保无误。现在对于文档的结构和关键信息的位置尚不明确,可以先将 Word 以段落 Paragraph 为单位输出观察:

wordfile = Document(path + r'\Notice\会议通知 1.docx')
for paragraph in wordfile.paragraphs:
    print(paragraph)

文件的文字排布脉络比较清晰,基本是一句话对应一个段落,而需要的信息可以简单通过判断每句话(每段话)前几个字而明确:

    for paragraph in wordfile.paragraphs:
        if paragraph.text[0:5] == '学习时间:':
            study_time = paragraph.text[5:]
        if paragraph.text[0:4] == '主持人:':
            host = paragraph.text[4:]
        if paragraph.text[0:5] == '学习形式:':
            study_type = paragraph.text[5:]

对于学习内容的获取比较特殊,不像其他三个信息,都在一句话中,且关键字就为前几个字:

可以看到,“学习内容” 四个字和真正包含的内容分散在不同的句子中。这里简单用一个策略:

建立一个空列表存放,然后遍历每一段判断,如果一个字符为数字且第二个字符为中文顿号 “、” 就获取存放到列表中。最后把列表中的元素重新组合成一个长字符串即可:

    content_lst = []
    for paragraph in wordfile.paragraphs:
        if paragraph.text[0:5] == '学习时间:':
            study_time = paragraph.text[5:]
        if paragraph.text[0:4] == '主持人:':
            host = paragraph.text[4:]
        if paragraph.text[0:5] == '学习形式:':
            study_type = paragraph.text[5:]
        if len(paragraph.text) >= 2:
            if paragraph.text[0].isdigit() and paragraph.text[1] == '、':
                content_lst.append(paragraph.text)
    content = ' '.join(content_lst)

完成了解析 Word 文件之后,就需要把内容输出的 Excel 文件中了。

简单来说,就是将上面代码获取到的几个元素组合成一个列表,通过 sheet.append(list) 的方法写入 Excel 文件中:

number = 0 # 全局中设置一个变量用于计数,做为序号输出

wordfile = Document(path + r'\Notice\会议通知 1.docx')
content_lst = []
for paragraph in wordfile.paragraphs:
    if paragraph.text[0:5] == '学习时间:':
        study_time = paragraph.text[5:]
    if paragraph.text[0:4] == '主持人:':
        host = paragraph.text[4:]
    if paragraph.text[0:5] == '学习形式:':
        study_type = paragraph.text[5:]
    if len(paragraph.text) >= 2:
        if paragraph.text[0].isdigit() and paragraph.text[1] == '、':
            content_lst.append(paragraph.text)
content = ' '.join(content_lst)
number += 1
sheet.append([number, study_time, content, study_type, host])

单个文件解析完,用 glob 改完获取文件夹下全部文件,建立循环逐个解析就能完成本需求,当然最后记得保存 Excel 文件。

完整代码如下👇

from docx import Document
from openpyxl import load_workbook
import glob

path  = r'C:\Users\xxx'
workbook = load_workbook(path + r'\Meeting_temp.xlsx')
sheet = workbook.active
number = 0

for file in glob.glob(path + r'\Notice*.docx'):
    wordfile = Document(file)
    content_lst = []
    for paragraph in wordfile.paragraphs:
        if paragraph.text[0:5] == '学习时间:':
            study_time = paragraph.text[5:]
        if paragraph.text[0:4] == '主持人:':
            host = paragraph.text[4:]
        if paragraph.text[0:5] == '学习形式:':
            study_type = paragraph.text[5:]
        if len(paragraph.text) >= 2:
            if paragraph.text[0].isdigit() and paragraph.text[1] == '、':
                content_lst.append(paragraph.text)
    content = ' '.join(content_lst)
    number += 1
    sheet.append([number, study_time, content, study_type, host])

workbook.save(path + r'\Meeting_notice.xlsx')

核心也不过三十行代码,总共不过三秒就搞定了!

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

CSDN大礼包:全网最全《全套Python学习资料》免费分享🎁

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉CSDN大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉CSDN大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值