编辑
2026-06-01
折腾
00

目录

起因:在几百个会议文件里大海捞针
第一版:能跑就行
第二版:加个「两步筛选」
翻车1:.doc 文件搜不出来
翻车2:慢成狗了
修复:让 Word 只开一次门
最后的样子
碎碎念

起因:在几百个会议文件里大海捞针

事情的起因很简单——我电脑里有个「会议学习」文件夹,里面按年份、按会议次数分了上百个 Word 文档。某天领导问我:"之前哪几次会议提过「人工智能」来着?你帮我查查。"

我打开文件夹一看:

会议学习/ ├── 2020年/ │ ├── 第1次会议/(纪要.doc + 学习资料.docx) │ ├── 第2次会议/(资料包/一堆文件 + 总结.doc) │ ... ├── 2021年/(更多...) ├── ... └── 2025年/

我沉默了。

一个个打开搜?那得搜到什么时候。


第一版:能跑就行

作为一个懒人,第一反应当然是写个脚本。Python 嘛,python-docx 读 .docx,os.walk 遍历文件夹,正则匹配关键词——半小时就搞出来了。

命令行版本跑了一下,确实能用。输入「人工智能」,哗啦啦列出:

2020年/第1次会议/纪要.docx: 3次 2020年/第3次会议/学习资料.doc: 1次 2021年/第5次会议/报告.docx: 2次 ...

我美滋滋地把结果发过去,结果领导又问:"那这些文件里,哪些是学习资料类的?先只看学习资料相关的文件。"

得,还得区分文件名。


第二版:加个「两步筛选」

既然要筛选文件名,那就加个功能呗。思路很简单:

第一步——输入文件名关键词(比如「学习资料」),把所有名字里带这几个字的文件筛出来,列给你看,让你确认找全了没有。

第二步——确认文件范围没问题了,再输入内容关键词(比如「成功」),程序只在这批筛选过的文件里搜,而不是在全量文件里大海捞针。

这就像超市买菜:先走到「蔬菜区」(文件名筛选),再在蔬菜区里找「西红柿」(内容搜索),而不是满超市乱跑。


翻车1:.doc 文件搜不出来

测试的时候好好的,结果一跑真实数据就翻车了。.docx 搜得挺准,但 .doc(老版 Word 格式)经常漏——明明文件里有那个词,就是搜不到。

排查了半天才搞明白:.doc 是微软的二进制格式,文字是嵌在一堆格式化数据里的。我之前用的「裸读」方案——直接把二进制文件当文本硬读——大部分是乱码,恰好漏掉关键词的概率很大。

解决方案倒也直接:既然 Windows 上装了 Office,那就直接调用 Word 本身来读。用 win32com 后台启动 Word,让它打开文件、提取文字、关掉。Word 自己读自己的格式,总不会出错吧?

试了一下,果然 100% 准确。


翻车2:慢成狗了

准确性解决了,新问题又来了——慢得离谱。搜 10 个 .doc 文件要等十几秒。

原因出在一个很蠢的设计上:我每读一个 .doc 文件,都走一遍这个流程:

启动 Word 程序 → 打开文档 → 读文字 → 关闭 Word 程序

10 个文件 = 启动关闭 Word 十次。Word 启动本身就要一两秒,时间全浪费在这上面了。


修复:让 Word 只开一次门

解决方案也很直观——Word 开一次就够了,所有文件轮流进去读,读完最后一个再关门。

就像去便利店买东西:你不会买一瓶水就出来关门,再开门进去买一包薯片,再出来关门……你肯定开着门,拿完所有东西再走。

改完之后,不管有多少个 .doc 文件,Word 只启动一次。速度直接从「等得想关电脑」变成「跟搜 .docx 一样快」。


最后的样子

最终版的工具长这样——一个朴实无华的 tkinter 窗口:

  • 选择文件夹
  • 文件名包含 ___ ← 第一步筛选
  • 内容关键词 ___ ← 第二步搜索
  • 点「开始搜索」

选好文件夹,输入关键词,回车。几秒钟后:

年份 会议 文件 出现次数 2022年 第3次会议 学习资料_AI应用.doc 3 2023年 第1次会议 学习资料_转型案例.docx 2

哪一年、哪一次会议、哪一个文件、出现了几次——清清楚楚。


碎碎念

说实话,这个工具本身没什么技术含量。一两百行 Python,一个 tkinter 界面,调几个现成的库。但写它的过程让我再次确认了一件事:

真正有用的工具,往往不是「技术最炫」的那个,而是刚好解决了你眼下那个烦人问题的那个。

搜几百个文件里有没有某个关键词,听起来 trivial,但手动去做就是折磨。写个脚本一小时,以后每次搜只要十秒——这个 tradeoff 怎么看都划算。

如果你也有类似的文件夹结构(年份→会议次→文档),拿去用就是了。代码放网盘了,下载下来 pip install pyinstaller python-docx pywin32 然后跑打包脚本就行。

祝你不用再手动翻上百个 Word 文档。

本文作者:haotian

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!