问题背景

小皮同学最近很苦恼。

小皮同学所在的科室最近承接了一个大工程的咨询项目,小皮同学和同事们都很开心,因为这意味着大家从画图的一跃变成了审图的,以前那种“专家一句话,改图头改大”的日子一去不返。因此大家在提出图审意见的时候,想必都是结合了自己丰富的绘图经验,最终的图审意见做到了内容详实,成果丰富。这些意见就像东风导弹一样,一枚枚的砸向设计单位,足足有200多发。

然而有时候搬起石头砸自己的脚就是这么容易,小皮同学碰上了难缠的业主。业主要求对每条图审意见按照降低施工风险、节约投资、设计优化、设计质量提升、提高施工可操作性进行分类,最终分成对应的五个word文档,每个文档里面包含提出的具体意见,意见对应的图册、图纸名称,图纸编号等信息。

那么问题来了,如果知道一条意见的具体内容,如何快速判定它属于哪一类呢?一般的做法是依次打开这五个word文档进行查询,对小皮同学来说,如果200多条意见挨个查下来,工作量太大而且容易出错,那么有没有工具可以快速做到多文档查询呢?

小皮同学上网做了一会功课,发现类似的需求还真不少,有人是想给案宗进行归类整理,有人是想在多个合同里面查询有没有出现相应关键字,还有人想批量替换多个word文档中的相应字符串等等。但是小皮同学发现,网上给出的解决方法却还比较初级,列举如下:

  • 利用windows自带的文件搜索功能,但是只能查到关键字所在的文档,而且速度比较坑爹。
  • 把文档合并成一个文件进行搜素,尽管操作上稍微有所简化,但是丢失了文档标题信息,而且也没法进行替换操作
  • 也有人推荐了一些软件,比如DocFetcher,Wordpipe,Search And Replace等等,但是一通使用下来发现,有些软件付费且功能繁琐,有些则完全没用,成本高且效果不太好。

代码实现

其实这个问题并不是很难解决,相反可以用来作为Python入门的案例。

首先需要在电脑上安装好Python环境,主要用到自带的OS模块以及python-docx模块。安装并配置环境这一块可能会难倒很多新手小朋友,有不懂的可以在评论区留言,人数多的话我会在专栏中专门写一篇文章来讲讲我自己的一些方法。

在配置好环境后,废话不多说,直接上代码。因为本人职业是一只设计汪,Python只是兴趣,代码写的不好的地方也欢迎各位程序员大神对代码批评指正。

import 

以上代码就能实现在多个文档中查询相关字符串,在使用的时候只需要把path后面的字符串替换成查询的word文档所在的路径即可,由于os.walk的特殊属性,此代码可以实现文件夹的遍历,意思是文件夹中的文件夹,文件夹中的文件夹的文件夹等等都能够做到刨根问底,刨个稀烂。

运行以后,会要求你输入需要搜索的字段,这里我输入的字符串为“工程”。

以一条典型的结果为例,输出的结果包含以下三部分内容:

  1. 文件中查询字符串前后的文本内容,这条信息用来判断查询的字符串前后大致是讲什么的。
  2. 查询到的字符串所在的文档名称,这条信息就是为了显示查询的字符串是在哪个word文件中。
  3. word文档所在的绝对路径。

但是以上代码也有缺陷,那就是python中的docx库并不能处理后缀名为.doc的文件,但是如果文件数量很多的话,一个个手动变为.docx文件又太过于繁琐,因此又有下面的代码可以实现批量将.doc文件转化为.docx文件。

import os
import sys
import pickle
import re
import  codecs
import string
import shutil
from win32com import client as wc
import docxpath = r"D:帅妹01施工总承包目录7-总包合同附件"
def doSaveAas(path_convert):word = wc.Dispatch('Word.Application')doc = word.Documents.Open(path_convert)        # 目标路径下的文件doc.SaveAs(f"{path_convert}_convert.docx", 12, False, "", True, "", False, False, False, False)  # 转化后路径下的文件    doc.Close()word.Quit()for root, dirs, files in os.walk(path, topdown=False):for file in files:filename = file.split(".")[0]ext = file.split(".")[1]if ext == "doc":doSaveAas(os.path.join(root, file))        

以上的代码借鉴了以下这篇文章,对于将自己的代码无私分享的作者表示感谢。

https://blog.csdn.net/weixin_40449300/article/details/79143971​blog.csdn.net

上面的代码中,依旧只需要将path变量替换成需要转化文档格式的word文件所在的目录即可。运行以上代码会将XXX.doc的文件转化为XXX_convert.docx文件,在进行完以上操作后,就可以使用第一段代码进行愉快的查询了。

代码解析

正所谓授人以鱼不如授人以渔,在这里将代码的大致思路讲一下,方便需要的同学自己对代码进行修改定制。

  • 在整段代码中,定义了一个叫search_str_in_paragraph的函数,目前只是返回查询字符串所在的索引,后期需要扩展的话可以加入更多的信息,比如页码数,行数等,根据自己的需要进行修改。
  • 整段代码首先调用os.walk函数,用来遍历需要查询文件夹中的所有文件,并拿到后缀为.docx的文件,然后调用Document类,来获得word文档中的段落信息,然后对每一段都执行str.index函数,目的是返回字符串所在的索引,最后将字符串所在位置的前后各10个字符、文件名、文件路径一起输出。
  • os.walk有一个topdown参数,如果需要遍历目录下的所有文件夹,就将其设置为True,否则设置为False。

以后的专栏文章也会更新一些土木工程师用的上的代码案例,欢迎各位同学点赞,收藏,关注。

.net函数查询_用python实现多文档查询相关推荐

  1. python获取word页数_使用Python的word文档的页数(Number of pages of a word document with Python)...

    使用Python的word文档的页数(Number of pages of a word document with Python) 有没有办法用Python有效地获得word文档(.doc,.doc ...

  2. python关闭word文件_使用Python退出Word文档的问题

    这是我第一次使用这个,所以要友好:)基本上我的问题是我正在制作一个程序,用于打开许多Microsoft Word 2007文档并从该文档的某个表中读取并写入该信息的Excel文件有超过1000字的文档 ...

  3. python进行数据查询_使用Python实现NBA球员数据查询小程序功能

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于早起Python ,作者投稿君 一.前言 有时将代码转成带有界面的程序,会极大地方便 ...

  4. python搜索pdf内容所在页码_利用Python在pdf文档中寻找某些词出现的页码

    要研究pdf文件的页码,首先要考虑这个文件的种类.pdf可能是一本书的电子版,可能是一份简历.可能是由Word.PPT或其他文档导出的--如果不是一本书,通常页面内容里是没有页码的:如果是一本书,虽然 ...

  5. python pdf处理工具_用Python处理pdf文档

    介绍 译者翻译了很多Python强大的包,其中,一以贯之的思想是:面向对象.我用下面的翻译来举一个例子,比如:从PyPDF2包中导入PdfFileReader包.PdfFileReader是此包的一个 ...

  6. pythondocx文档重叠_使用PYTHON实现docx文档的读写

    经常写文章的小白们会遇到这样的问题,知道想表达的意思,想出了大概描述的词汇,但就是缺乏完整漂亮的句子,也许曾经在某个地方看到过,但是找不到了.另外一种情况,阅读了大量的报告,用的时候想到了其中的某个结 ...

  7. python使用xlrd读取xlsx文件_$ 用python处理Excel文档(1)——用xlrd模块读取xls/xlsx文档...

    本文主要介绍xlrd模块读取Excel文档的基本用法,并以一个GDP数据的文档为例来进行操作. 1. 准备工作: 1. 安装xlrd:pip install xlrd 2. 准备数据集:从网上找到的1 ...

  8. python怎么统计文本中的字频_【python】实现文档中的多频词统计

    案例:三国小说主要人物出场频率统计 首先导入必要的模块: import jieba from collections import Counter from wordcloud import Word ...

  9. python 搜索pdf文件中的文字_使用python查找pdf文档中搜索字符串位于哪一页

    我终于发现pyPDF可以帮上忙.我把它寄出去,以防它能帮助别人. (1)定位字符串的函数def fnPDF_FindText(xFile, xString): # xfile : the PDF fi ...

最新文章

  1. 安装sql 2005 闪退 连接到服务器失败。错误:0x80070424
  2. tf.signal.stft() 短时傅里叶变换的示例
  3. Linux 基本网络配置 实验手册
  4. Android监听SD卡文件变化
  5. String的内存模型,为什么String被设计成不可变的
  6. Java并发编程实战 第13章 显式锁
  7. 谈谈对python 和其他语言的区别_谈谈Python和其他语言的区别
  8. apache camel_探索Apache Camel Core –文件组件
  9. 每日一题(30)—— 局部变量能否和全局变量重名?
  10. WebDriver使用入门
  11. 博士的浪漫,就是把你写进论文致谢,保存一辈子
  12. 谷歌了java集成开发_Spring整合Kaptcha谷歌验证码工具的开发步骤
  13. 点击EditText可编辑,点击其他地方不可编辑
  14. Unity如何调用安卓手机摄像头实现拍照和录像
  15. 异常处理与MiniDump详解 4 MiniDump
  16. tensorflow padded_batch的注意事项
  17. 全角和半角的区别及使用方式
  18. 存储中所说的蓝光和磁带库
  19. go语言字符串变量初始化以及字符串拼接
  20. [转载]Merlin 给 Java 平台带来了非阻塞 I/O

热门文章

  1. 生物科技PSD分层海报模板|细胞光效微观,满满渗透感
  2. UI实用素材|促销弹出设计
  3. 牛客网编程题06--取近似值
  4. Intel异常的分类:错误,陷阱,终止
  5. Linux开机启动过程(10):start_kernel 初始化(至setup_arch初期)
  6. Linux内核进程管理:进程的“内核栈”、current宏、进程描述符
  7. Flink的定时器(EventTime和ProcessTime)
  8. python打包文件提示错误
  9. pyqt 取鼠标处文字_顶级玩家首选 赛睿QcK Edge鼠标垫体验评测
  10. python颜色识别原理_用opencv-python实现颜色检测