运用:os.walk递迴搜寻,档案内文
前天发的错误版本(已删除),掉入os.walk天坑,和python迴圈不明确的陷阱内撞墙,今天本文是更正版。
套件:读旧版word .doc 先 pip install pypiwin32
读word .docx 请 pip install python-docx
import os, sys, docxfrom win32com import client
流程:
指定搜寻之目录 (或者预设为当前目录)选择要筛选的档案类型取得档案串列逐一打开档案,搜寻keywordreportsave 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、档案类型
搜寻后结果存档,打开来看看
特别注意:因为连续开启、关闭多个word档案,如果在除错执行中程式中断了,会造成word不正常关闭情况,还在背景运作。如果这时又重新测试程式,常常就卡住不动了。
请去"工作管理员"把word关档。
或是出现这个提示时,按yes