使用 python-docx 和 difflib 对比 Word 文档

使用 python-docx 和 difflib 对比 Word 文档

以下是一个 Python 脚本示例,用于比较两个 Word 文档的文本内容差异:

复制代码
from docx import Document
import difflib

def read_word_file(file_path):
    doc = Document(file_path)
    full_text = []
    for para in doc.paragraphs:
        full_text.append(para.text)
    return '\n'.join(full_text)

def compare_word_files(file1, file2):
    text1 = read_word_file(file1)
    text2 = read_word_file(file2)
    
    d = difflib.Differ()
    diff = list(d.compare(text1.splitlines(), text2.splitlines()))
    
    print('\n'.join(diff))

# 使用示例
compare_word_files('document1.docx', 'document2.docx')

安装依赖库

运行前需要安装 python-docx 和 difflib(后者是 Python 标准库):

复制代码
pip install python-docx

输出结果说明

  • 以 '-' 开头的行表示第一个文档独有的内容
  • 以 '+' 开头的行表示第二个文档独有的内容
  • 以空格开头的行表示两个文档共有的内容

处理复杂格式差异

如果需要比较格式差异(如字体、颜色等),可以使用更专业的库如 python-docx-compare:

复制代码
from docxcompose.composer import Composer
from docx import Document

doc1 = Document("document1.docx")
doc2 = Document("document2.docx")

composer = Composer(doc1)
composer.append(doc2)
composer.save("compared.docx")

可视化差异输出

对于更直观的差异展示,可以生成 HTML 格式的对比结果:

复制代码
diff_html = difflib.HtmlDiff().make_file(
    text1.splitlines(), 
    text2.splitlines(),
    fromdesc='Document 1',
    todesc='Document 2'
)
with open('diff.html', 'w') as f:
    f.write(diff_html)
相关推荐
孟健3 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞5 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽8 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
敏编程12 小时前
一天一个Python库:jsonschema - JSON 数据验证利器
python
前端付豪12 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
databook13 小时前
ManimCE v0.20.1 发布:LaTeX 渲染修复与动画稳定性提升
python·动效
花酒锄作田1 天前
使用 pkgutil 实现动态插件系统
python
前端付豪1 天前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
曲幽1 天前
FastAPI实战:打造本地文生图接口,ollama+diffusers让AI绘画更听话
python·fastapi·web·cors·diffusers·lcm·ollama·dreamshaper8·txt2img
老赵全栈实战1 天前
Pydantic配置管理最佳实践(一)
python