Python 自动化之处理docx文件(一)

批量筛选docx文档中关键词


文章目录

  • 批量筛选docx文档中关键词
  • 前言
  • 一、做成什么样子
  • 二、基本架构
  • 三、前期输入模块
    • 1.引入库
    • 2.路径输入
    • 3.关键词输入
  • 三、数据处理模块
    • 1.基本架构
    • 2.如果是docx文档
      • 2.1.读取当前文档内容
      • 2.2.遍历匹配关键字
      • 2.3.触发匹配并记录日志
    • 3.如果目录下还有一个目录
      • 3.1.判断并生成新目录
      • 3.2.获取子目录里的东西并遍历它
      • 3.3.接着判断如果是docx文档
      • 3.4.遍历匹配关键字
      • 3.5.触发匹配并记录日志
  • 总结


前言

在工作中经常会遇到,需要检查文档千万不能出现某个关键词,一个文档那还好说。但如果有成千上百个需要检查呢?
下面来给大家介绍一个批量检查的教程。

在这里插入图片描述


一、做成什么样子

  1. 支持当前目录下所有docx文档内容的检查。
  2. 支持当前目录下的子目录里面所有的docx文档内容的检查。
  3. 当前目录出现的问题会在当前目录生成日志文件记录下来。
  4. 日志格式为:<<文件绝对路径>> 文档中出现了关键词:《关键词》。
  5. 支持批量输入关键词,所有关键词都会进行逐一对比。

下面给大家展示一下效果图。
在这里插入图片描述

二、基本架构

主要包括以下几部分:

  1. 库输入模块
  2. 路径输入模块
  3. 关键词输入模块
  4. 数据处理模块

三、前期输入模块

库、路径、关键词比较简单。我就把它们全部写到这一节。

1.引入库

代码如下:

import docx
import os
import re

docx:用来读取文档内容的。
os:用来搞定一系列路径问题。
re:正则表达式模块,用来给关键词搞精确匹配的。


2.路径输入

代码如下:

print(r'请输入文档完整路径(例子:E:\vtest):', end='')
file_path = input()# 获取目录下的所有条目
entries = os.listdir(file_path)
print(entries)

输入路径后,程序会先获取一下当前路径下的东西,形成一个列表并打印出来。


3.关键词输入

代码如下:

# 获取关键词列表
Prohibited_lists = []
while True:print('请输入要查询的关键字(例子:奥利给),按q退出输入:', end='')Prohibited_words = input()if Prohibited_words == 'q':breakProhibited_lists.append(Prohibited_words)print("退出循环,禁止词汇列表:", Prohibited_lists)

首先,创建一个空列表,用来存储用户输入的关键词。
其次,一个while循环,用来保持用户可以一直输入关键词。
然后,关键词触发,当用户输入q可以退出输入关键程序。
最后,打印一条信息,告诉用户都有哪些关键词会进行匹配。


三、数据处理模块

这里我先写一下处理逻辑。

1.基本架构

代码如下:

for entry in entries:if entry.endswith('.docx'):    # 如果是docx文档...........       elif os.path.isdir(os.path.join(file_path, entry)):    # 如果目录里的东西还是个目录...........

首先,搞个循环结构,遍历一下用户输入的路径下的东西。
其次,对这些东西进行判断,进行两中不同的操作。
下面我将会按照这个结构顺序来写。


2.如果是docx文档

2.1.读取当前文档内容

代码如下:

for entry in entries:if entry.endswith('.docx'):    # 如果是docx文档# 使用os.path.join()构造完整文件路径full_entry_path = os.path.join(file_path, entry)# 使用 python-docx 打开文档doc = docx.Document(full_entry_path)# 将每一个段落的文本合并为一个字符串text = " ".join([para.text for para in doc.paragraphs])

首先,根据当前遍历的文件和用户输入的路径来共同构成完整文件路径。
其次,根据完整文件路径,读取文件内容。
最后,将每一个段落的文本合并为一个字符串,便于后面的关键字匹配。


2.2.遍历匹配关键字

代码如下:

        # 遍历关键字列表for Prohibited_list in Prohibited_lists:# 正则表达式匹配关键字ProhibitedRegex = re.compile(rf'.*{Prohibited_list}+.*')mo = ProhibitedRegex.search(text)

这里我们用的是正则表达式匹配关键字。看不懂的同学要去看下正则表达式的知识点喽。

ProhibitedRegex = re.compile(rf’.{Prohibited_list}+.') 这行代码创建了一个正则表达式对象,用于查找包含在 Prohibited_list 关键词。

mo = ProhibitedRegex.search(text) 这行代码使用了上面创建的正则表达式对象来搜索 text 中是否存在匹配的禁止词汇。如果找到匹配项,则返回一个匹配对象(MatchObject),否则返回 None。


2.3.触发匹配并记录日志

代码如下:

            # 如果匹配到了关键字if mo is not None:# 使用os.path.join()构造完整文件路径full_text_path = os.path.join(file_path, 'problems.txt')# 将问题写入text文档,并保存到当前目录with open(full_text_path, 'a') as f:f.write(f'<<{full_entry_path}>> 文档中出现了关键词:{Prohibited_list}\n')# 如果没有匹配到关键字else:print(f'<<{full_entry_path}>> 文档没有出现关键词:{Prohibited_list}。')

一目了然,共分成两部分:一是匹配到了关键字;二是没有匹配到关键字。

匹配到了:第一步先构建日志文件的路径;第二步将问题写入到text文档,并保存到当前目录(如果当前目录没有该文件,会自动创建。)

没匹配到:就简单提示一下啦。


3.如果目录下还有一个目录

3.1.判断并生成新目录

代码如下:

    # 判断目录下是否还有目录elif os.path.isdir(os.path.join(file_path, entry)):# 使用字符串拼接一下路径,生成新路径(给子目录下的文档使用)file_path = file_path + '\\' + entry      

一般我们保存文件不会一股脑的都保存到一个目录中。最起码目录中再搞一个子目录分一下类。
这个代码就是处理这个问题的。


3.2.获取子目录里的东西并遍历它

代码如下:

        # 获取目录下的所有条目entries = os.listdir(file_path)print(entries)# 遍历当前所有条目for entry_1 in entries:

接下来就是获取一下子录下的所有东西啦。
然后再搞一个遍历结构,一个一个的处理它们。


3.3.接着判断如果是docx文档

代码如下:

            if entry_1.endswith('.docx'):# 使用os.path.join()构造完整文件路径full_entry_path = os.path.join(file_path, entry_1)# 使用 python-docx 打开文档doc = docx.Document(full_entry_path)# 将每一个段落的文本合并为一个字符串text = " ".join([para.text for para in doc.paragraphs])

请参考 《2.1.读取当前文档内容》


3.4.遍历匹配关键字

代码如下:

                # 正则表达式匹配关键字for Prohibited_list in Prohibited_lists:ProhibitedRegex = re.compile(rf'.*{Prohibited_list}+.*')mo = ProhibitedRegex.search(text)

请参考 《2.2.遍历匹配关键字》


3.5.触发匹配并记录日志

代码如下:

                    if mo is not None:# 使用os.path.join()构造完整文件路径full_text_path = os.path.join(file_path, 'problems.txt')# 将问题写入text文档,并保存到当前目录with open(full_text_path, 'a') as f:f.write(f'<<{full_entry_path}>> 文档中出现了关键词:{Prohibited_list}\n')else:print(f'<<{full_entry_path}>> 文档没有出现关键词:{Prohibited_list}。')

请参考 《2.3.触发匹配并记录日志》


总结

以上的代码,包括我之前写的所有代码,都是在Python 3.11版本下写的,其它版本下运行可能会有问题。并且以上代码可以直接按顺序复制粘贴就可以使用,不用再调格式(可以发现越往后代码前面的空格越多,这个就是格式)。用起来有问题可以私信或者评论给我哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/216143.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python从入门到精通八:Python文件操作

文件的编码 思考&#xff1a;计算机只能识别&#xff1a;0和1&#xff0c;那么我们丰富的文本文件是如何被计算机识别&#xff0c;并存储在硬盘中呢&#xff1f; 答案&#xff1a;使用编码技术&#xff08;密码本&#xff09;将内容翻译成0和1存入。 编码技术即&#xff1a;…

代码随想录刷题题Day11

刷题的第十一天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C / Python Day11 任务 ● 理论基础 ● 递归遍历 ● 迭代遍历 ● 统一迭代 1 二叉树理论基础 1.1 二叉树的种类 &#xff08;1&…

LNMP网站架构分布式搭建部署

1. 数据库的编译安装 1. 安装软件包 2. 安装所需要环境依赖包 3. 解压缩到软件解压缩目录&#xff0c;使用cmake进行编译安装以及模块选项配置&#xff08;预计等待20分钟左右&#xff09;&#xff0c;再编译及安装 4. 创建mysql用户 5. 修改mysql配置文件&#xff0c;删除…

计网 - LVS 是如何直接基于 IP 层进行负载平衡调度

文章目录 模型LVS的工作机制初探LVS的负载均衡机制初探 模型 大致来说&#xff0c;可以这么理解&#xff08;只是帮助我们理解&#xff0c;实际上肯定会有点出入&#xff09;&#xff0c;对于我们的 PC 机来说&#xff0c;物理层可以看成网卡&#xff0c;数据链路层可以看成网卡…

图论-并查集

并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题.一些常见的用途有求连通子图,求最小生成树Kruskal算法和最近公共祖先(LCA)等. 并查集的基本操作主要有: .1.初始化 2.查询find 3.合并union 一般我们都会采用路径压缩 这样…

【Spark精讲】Spark任务运行流程

Spark任务执行流程 部署模式是根据Drvier和Executor的运行位置的不同划分的。client模式提交任务与Driver进程在同一个节点上&#xff0c;而cluster模式提交任务与Driver进程不在同一个节点。 Client模式 Clinet模式是在spark-submit提交任务的节点上运行Driver进程。 …

Vue3-14- 【v-for】循环数组-解构的操作

说明 v-for 在遍历数组的时候&#xff0c;可以使用解构的语法&#xff0c;直接将数组中对象元素的属性解构出来&#xff0c; 从而实现直接使用对象属性值的效果。语法格式 &#xff1a; v-for"({属性名1,属性名2},索引变量名) in 数组名"具体的使用请看代码&#xf…

Conda 搭建简单的机器学习 Python 环境

文章目录 Conda 概述Conda 常用命令Conda 自身管理查看 Conda 版本更新 Conda清理索引缓存添加镜像源设置搜索时显示通道地址查看镜像源删除镜像源 环境管理创建虚拟环境删除虚拟环境查看所有虚拟环境复制虚拟环境激活虚拟环境关闭虚拟环境导入、导出环境 包管理虚拟环境下安装…

数据可视化:解析跨行业普及之道

数据可视化作为一种强大的工具&#xff0c;在众多行业中得到了广泛的应用&#xff0c;其价值和优势不断被发掘和利用。今天就让我以这些年来可视化设计的经验&#xff0c;讨论一下数据可视化在各个行业中备受青睐的原因吧。 无论是商业、科学、医疗保健、金融还是教育领域&…

HTML---基础

文章目录 目录 文章目录 前言 一.HTML概述 二.HTML相关概念 HTML作用域 HTML标签 HTML转译字符 总结 前言 一.HTML概述 HTML&#xff08;超文本标记语言&#xff09;是一种用于创建网络页面的标记语言。它以标记的形式编写&#xff0c;该标记描述了文档的结构和内容。HTML…

QT----第三天,Visio stdio自定义封装控件

目录 第三天1 自定义控件封装 源码&#xff1a;CPP学习代码 第三天 1 自定义控件封装 新建一个QT widgetclass&#xff0c;同时生成ui,h,cpp文件 在smallWidget.ui里添加上你想要的控件并调试大小 回到mainwidget.ui&#xff0c;拖入一个widget&#xff08;因为我们封装的也…

时间序列预测 — BiLSTM实现多变量多步光伏预测(Tensorflow)

目录 1 数据处理 1.1 导入库文件 1.2 导入数据集 1.3 缺失值分析 2 构造训练数据 3 模型训练 3.1 BiLSTM网络 3.2 模型训练 4 模型预测 1 数据处理 1.1 导入库文件 import time import datetime import pandas as pd import numpy as np import matplotlib.pyplot…

从有趣的AI剧情游戏《完蛋!我被名场面包围了》来看AI游戏的思考

大家好&#xff0c;我是极智视界&#xff0c;欢迎关注我的公众号&#xff0c;获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码和资源下载&#xff0c;链接&#xff1a;https://t.zsxq.com/0aiNxERDq 这个话题总能引起很…

MySQL笔记-第18章_MySQL8其它新特性

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第18章_MySQL8其它新特性1. MySQL8新特性概述1.1 MySQL8.0 新增特性1.2 MySQL8.0移除的旧特性 2. 新特性1&#xff1a;窗口函数2.1 使用窗口…

在idea中使用maven创建dynamic web project

0、先正确安装MAVEN, TOMCAT &#xff0c;并集成到idea 1、new 一个 project&#xff0c; 使用maven的archetype-webapp创建 2、等待创建&#xff0c;会提示build success 3、给project 添加tomcat配置&#xff0c;并部署project到 tomcat 4、运行 5、OK 6、再次引入时&…

数据结构之归并排序及排序总结

目录 归并排序 归并排序的时间复杂度 排序的稳定性 排序总结 归并排序 归并排序大家只需要掌握其递归方法即可&#xff0c;非递归方法由于在某些特殊场景下边界难控制&#xff0c;我们一般很少使用非递归实现归并排序。那么归并排序的递归方法我们究竟是怎样实现呢&#xff…

算法--最小生成树和二分图

这里写目录标题 Xmind最小生成树Prim算法思想例子题解 kruskal算法思想例子题解 二分图染色法思想 二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 Xmind 最小生成树 Prim算法 思想 对于dist数组&am…

Spring boot -- 学习HttpMessageConverter

文章目录 1. Json格式数据获取2. 为什么返回Json格式的数据2.1 注解SpringBootAppliaction2.1.1 SpringBootConfiguration2.1.2 ComponentScan2.1.3 EnableAutoConfiguration2.1.3.1 HttpMessageConvertersAutoConfiguration2.1.3.2 WebMvcAutoConfiguration 2.2 注解RestContr…

独立完成软件的功能的测试(2)

独立完成软件的功能的测试&#xff08;2&#xff09; &#xff08;12.13&#xff09; 1. 对穷举场景设计测试点&#xff08;等价类划分法&#xff09; 等价类划分法的概念&#xff1a; 说明&#xff1a;数据有共同特征&#xff0c;成功失败分类&#xff1a; 有效&#xff1a…

基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(二)

目录 前言引言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理1&#xff09;数据介绍2&#xff09;数据测试3&#xff09;数据处理 相关其它博客工程源代码下载其它资料下载 前言 博主前段时间发布了一篇有关方言识别和分类模型训练的博客&#xff0c;在读者…