文章内搜寻,doc docx txt 子目录下所有档 (Python)

运用:os.walk递回搜寻,档案内文
前天发的错误版本(已删除),掉入os.walk天坑,和python回圈不明确的陷阱内撞墙,今天本文是更正版。
套件:读旧版word .doc 先 pip install pypiwin32
读word .docx 请 pip install python-docx

import os, sys, docx
from win32com import client

流程:

  1. 指定搜寻之目录 (或者预设为当前目录)
  2. 选择要筛选的档案类型
  3. 取得档案串列
  4. 逐一打开档案,搜寻keyword
  5. report
  6. save result

旧版word .doc读档略为麻烦,解释一下,其它请download source code

#--- 找档案内容,有无 keyword 之存在
# 参数 afile 档名  keyword 要搜寻的字
# 传回: found : key:找到的位置 / value:该段落文字  
def findDoc(afile, keyword):
    found = dict()
    try:
        # 开启旧版word档的方式  .doc
        word = client.gencache.EnsureDispatch('Word.Application')
        word.Visible = 0
        word.DisplayAlerts = 0
        doc = word.Documents.Open(afile)
        paras = doc.Paragraphs
        n = 0 
        print(f'searching ... {afile}' )              
        for p in paras:
            n += 1  # 段落数
            # 如果该段落有此一keyword
            if keyword in p.Range.Text:
                tmp = f'档案: {afile} 第{n}行找到< {keyword} >'
                # dict 新增一笔 key:找到的位置 / value:该行文字
                found[tmp] = p.Range.Text
        doc.Close()   # 关档步骤,不可少         
    except:
        err = f'档案: {afile} 读取错误'
        found[0] = err
        
    return found     

从console执行,会询问起始资料夹、keyword、档案类型
https://ithelp.ithome.com.tw/upload/images/20210911/20111373g8flJtz6An.jpg
搜寻後结果存档,打开来看看
https://ithelp.ithome.com.tw/upload/images/20210911/20111373OTb7R90ifQ.jpg

特别注意:因为连续开启、关闭多个word档案,如果在除错执行中程序中断了,会造成word不正常关闭情况,还在背景运作。如果这时又重新测试程序,常常就卡住不动了。
请去"工作管理员"把word关档。
https://ithelp.ithome.com.tw/upload/images/20210911/20111373mDHaOkSjLn.jpg
或是出现这个提示时,按yes
https://ithelp.ithome.com.tw/upload/images/20210911/20111373yGOTY3EaHz.jpg


<<:  DAY11 资料前处理-资料不平衡处理方法

>>:  错误处理

ThinkPHP V5.1 新增控制器

还不会创建ThinkPHP V5.1专案的朋友们可以先去看看创建ThinkPHP V5.1专案。 何...

开源的WebPC让你使用浏览器远程控制 linux or windows

WebPC 是我刚在 github 上开源(MIT)的一个远控工具,可以作爲 TeamViewer ...

Day 19 Method

Method程序设计中,可以说是将程序模组化,这样有助於加速程序的开发、便於分析与维护等,如果要重复...

[day4] 安全签章 - 产生订单 & 签章(Sign)

准备讯息文本 依照参数说明,建立订单的资料结构(DAY3-参考),详细参数规格可以在永丰API技术规...

工欲善其事,必先利其器

开始IaC之前,必先做好前置作业 昨天介绍了一些AWS建置环境的方法,今天会先做CloudForma...