下面给你一个实用、可直接用的 Python 方案,可以在多个 Word(.docx)文档中一键搜索关键词,并输出匹配到的文件名与位置内容。


一、实现思路(简单版)

  1. 遍历指定文件夹下的所有 .docx 文件
  2. 读取 Word 中的:
    • 正文段落
    • (可选)表格内容
  3. 判断是否包含关键词
  4. 输出结果(文件名 + 匹配内容)

二、准备环境

1️⃣ 安装依赖

pip install python-docx


三、基础版:搜索多个 Word 文档正文

示例目录结构

docs/
 ├── a.docx
 ├── b.docx
 └── c.docx


Python 示例代码(正文搜索)

import os
from docx import Document

def search_word_docs(folder_path, keyword):
    results = []

    for filename in os.listdir(folder_path):
        if filename.endswith(".docx"):
            file_path = os.path.join(folder_path, filename)
            doc = Document(file_path)

            for i, para in enumerate(doc.paragraphs):
                if keyword in para.text:
                    results.append({
                        "file": filename,
                        "paragraph": i + 1,
                        "content": para.text.strip()
                    })

    return results


if __name__ == "__main__":
    folder = "docs"      # Word 文件夹路径
    keyword = "Python"   # 要搜索的关键词

    matches = search_word_docs(folder, keyword)

    if matches:
        for item in matches:
            print(f"📄 文件: {item['file']}")
            print(f"📌 段落: 第 {item['paragraph']} 段")
            print(f"🔍 内容: {item['content']}")
            print("-" * 50)
    else:
        print("❌ 未找到匹配内容")


四、进阶版:同时搜索【正文 + 表格】

Word 里的重要内容经常藏在表格里,建议一起搜。

升级版代码(正文 + 表格)

import os
from docx import Document

def search_word_docs(folder_path, keyword):
    results = []

    for filename in os.listdir(folder_path):
        if not filename.endswith(".docx"):
            continue

        file_path = os.path.join(folder_path, filename)
        doc = Document(file_path)

        # 搜索正文
        for i, para in enumerate(doc.paragraphs):
            if keyword in para.text:
                results.append((filename, "正文", i + 1, para.text.strip()))

        # 搜索表格
        for t_index, table in enumerate(doc.tables):
            for r_index, row in enumerate(table.rows):
                for c_index, cell in enumerate(row.cells):
                    if keyword in cell.text:
                        results.append((
                            filename,
                            f"表格{t_index + 1}",
                            f"行{r_index + 1}列{c_index + 1}",
                            cell.text.strip()
                        ))

    return results


if __name__ == "__main__":
    folder = "docs"
    keyword = "数据库"

    results = search_word_docs(folder, keyword)

    for r in results:
        print(f"📄 文件: {r[0]}")
        print(f"📍 位置: {r[1]} - {r[2]}")
        print(f"🔍 内容: {r[3]}")
        print("-" * 60)


五、常见扩展需求(我可以继续帮你)

你如果有下面这些需求,我可以直接给你现成代码:

  • 忽略大小写搜索
  • 正则表达式搜索
  • 导出为 Excel / CSV
  • GUI 图形界面(点按钮搜索)
  • 支持 .doc + .docx
  • 支持中文分词搜索
  • Word 数千个文档的高性能搜索

六、适用场景

✔ 论文 / 合同 / 制度文件检索
✔ 日志 / 报告批量排查
✔ 学生选课系统文档审查(你之前做 Spring Boot 项目时很适合)
✔ 自媒体 / 纪录片素材整理


好,那我直接给你一个可双击运行的「Word 文档一键搜索工具(带图形界面)」,不用写命令行,点按钮就能搜 👍

下面这个方案 稳定、简单、适合长期用


一、功能说明(你将得到什么)

✅ 图形界面(窗口)
✅ 选择 Word 文件夹
✅ 输入关键词
✅ 搜索 正文 + 表格
✅ 搜索结果实时显示
✅ 支持中文
✅ 可一键打包成 .exe


二、准备环境(只需一次)

1️⃣ 安装依赖

pip install python-docx

tkinter 是 Python 自带的,不用装)


三、完整 GUI 程序代码(直接可用)

📌 保存为:word_search_gui.py

import os
import tkinter as tk
from tkinter import filedialog, messagebox, scrolledtext
from docx import Document

def search_docs():
    folder = folder_path.get()
    keyword = keyword_entry.get().strip()

    if not folder or not keyword:
        messagebox.showwarning("提示", "请选择文件夹并输入关键词")
        return

    result_text.delete(1.0, tk.END)
    found = False

    for root, dirs, files in os.walk(folder):
        for file in files:
            if file.endswith(".docx"):
                file_path = os.path.join(root, file)
                try:
                    doc = Document(file_path)

                    # 搜索正文
                    for i, para in enumerate(doc.paragraphs):
                        if keyword in para.text:
                            found = True
                            result_text.insert(tk.END,
                                f"📄 文件:{file}\n"
                                f"📌 正文 第 {i+1} 段\n"
                                f"🔍 内容:{para.text}\n"
                                f"{'-'*50}\n"
                            )

                    # 搜索表格
                    for t_idx, table in enumerate(doc.tables):
                        for r_idx, row in enumerate(table.rows):
                            for c_idx, cell in enumerate(row.cells):
                                if keyword in cell.text:
                                    found = True
                                    result_text.insert(tk.END,
                                        f"📄 文件:{file}\n"
                                        f"📌 表格 {t_idx+1} 行{r_idx+1} 列{c_idx+1}\n"
                                        f"🔍 内容:{cell.text}\n"
                                        f"{'-'*50}\n"
                                    )

                except Exception as e:
                    print(f"读取失败:{file_path}", e)

    if not found:
        result_text.insert(tk.END, "❌ 未找到匹配内容")

def choose_folder():
    path = filedialog.askdirectory()
    if path:
        folder_path.set(path)

# ================= GUI =================

root = tk.Tk()
root.title("Word 文档一键搜索工具")
root.geometry("800x600")

# 文件夹选择
frame_top = tk.Frame(root)
frame_top.pack(pady=10)

folder_path = tk.StringVar()

tk.Label(frame_top, text="Word 文件夹:").grid(row=0, column=0, padx=5)
tk.Entry(frame_top, textvariable=folder_path, width=50).grid(row=0, column=1)
tk.Button(frame_top, text="选择文件夹", command=choose_folder).grid(row=0, column=2, padx=5)

# 关键词
tk.Label(frame_top, text="关键词:").grid(row=1, column=0, pady=10)
keyword_entry = tk.Entry(frame_top, width=30)
keyword_entry.grid(row=1, column=1, sticky="w")

tk.Button(frame_top, text="🔍 开始搜索", command=search_docs).grid(row=1, column=2)

# 结果区
result_text = scrolledtext.ScrolledText(root, wrap=tk.WORD)
result_text.pack(expand=True, fill=tk.BOTH, padx=10, pady=10)

root.mainloop()


四、如何使用(3 步)

1️⃣ 双击运行 word_search_gui.py
2️⃣ 点击【选择文件夹】
3️⃣ 输入关键词 → 点【开始搜索】

📌 搜索结果会直接显示在窗口里


五、打包成 EXE(无需 Python 环境)

如果你想发给别人用 👇

1️⃣ 安装打包工具

pip install pyinstaller

2️⃣ 打包

pyinstaller -F -w word_search_gui.py

📁 生成位置:

dist/word_search_gui.exe

双击即可运行 ✅