Python 操作 Word 文档属性与字数统计方法详解

简介: 小李用Python自动化处理30份Word报告:借助python-docx库,批量提取文档标题、作者、创建/修改时间等核心属性,并精准统计段落、表格及页眉页脚的中文字符数,大幅提效。


小李是刚入职场的行政助理,这天领导扔给他30份项目报告,要求统计每份报告的字数,还要提取创建时间和最后修改作者。手动打开一个个Word文档复制粘贴,显然不现实,小李决定用Python试试。
代理 IP 使用小技巧 让你的数据抓取效率翻倍 (46).png

准备工作:安装与导入
操作Word文档最常用的库是python-docx。它只支持.docx格式,老旧的.doc格式需要先转换。

pip install python-docx

安装完成后,在代码中导入。处理日期时间还需要datetime库:

from docx import Document
from datetime import datetime

读取文档属性
Word文档的属性就像文件的“身份证”,记录了标题、作者、创建时间、修改次数等信息。这些信息藏在文档的“Core Properties”部分,python-docx可以轻松读取。

def get_doc_properties(doc_path):
doc = Document(doc_path)
core_props = doc.core_properties

info = {
    "标题": core_props.title,
    "作者": core_props.author,
    "分类": core_props.category,
    "状态": core_props.content_status,
    "创建时间": core_props.created,
    "修改时间": core_props.modified,
    "最后保存者": core_props.last_modified_by,
    "修订次数": core_props.revision
}
return info

props = get_doc_properties("项目报告.docx")
for key, value in props.items():
print(f"{key}: {value}")

输出结果类似于:

标题: 2024年度项目总结
作者: 张三
创建时间: 2024-12-01 10:30:00
最后保存者: 李四
修订次数: 5

注意created和modified返回的是datetime对象,可以直接用strftime格式化。

字数统计:主体内容
字数统计稍微复杂些。文档里的文字分散在不同的地方:段落、表格、页眉页脚、文本框。先统计最常见的主体段落和表格。

def count_word_document(doc_path):
doc = Document(doc_path)

total_chars = 0

for paragraph in doc.paragraphs:
    text = paragraph.text.strip()
    total_chars += len(text)

for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            text = cell.text.strip()
            total_chars += len(cell.text)

return total_chars

word_count = count_word_document("项目报告.docx")
print(f"文档总字符数: {word_count}")

这里用len(text)统计字符数。对中文来说,每个汉字算1个字符。英文场景下可能需要按空格分词来统计单词数,用len(text.split())即可。

进阶字数统计:包含页眉页脚
页眉页脚往往藏着重要信息,比如公司名称、文档版本。统计它们能让字数更完整。

def count_with_headers(doc_path):
doc = Document(doc_path)
total_chars = 0

for paragraph in doc.paragraphs:
    total_chars += len(paragraph.text)

for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            total_chars += len(cell.text)

for section in doc.sections:
    header = section.header
    for paragraph in header.paragraphs:
        total_chars += len(paragraph.text)

    footer = section.footer
    for paragraph in footer.paragraphs:
        total_chars += len(paragraph.text)

return total_chars

通过doc.sections遍历每个节,再分别访问页眉和页脚的段落。

注意事项
段落与Run的区别:python-docx把一段文字拆成多个Run对象,每个Run是一段样式相同的连续文本。直接取paragraph.text会合并所有Run的文本,对字数统计没影响。但如果要统计带格式的文字数量,可以遍历paragraph.runs分别处理。

性能问题:几十上百页的文档,遍历所有表格和段落没问题。上千页的超长文档,建议分页读取或换用更底层的lxml直接解析XML。

分页统计:python-docx本身不提供精确的页数统计。如果依赖分页符来分页,可以用paragraph.contains_page_break判断:

def estimate_pages(doc_path):
doc = Document(doc_path)
page_breaks = sum(1 for p in doc.paragraphs if p.contains_page_break)
return page_breaks + 1

这种方法只对手动插入分页符的文档有效,纯自动排版的文档会返回1。

完整示例:批量处理脚本
把上面内容整合成一个批量处理脚本:

import os
from docx import Document
from datetime import datetime

def analyze_doc(doc_path):
try:
doc = Document(doc_path)
props = doc.core_properties

    char_count = 0
    for para in doc.paragraphs:
        char_count += len(para.text)
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                char_count += len(cell.text)

    return {
        "文件": os.path.basename(doc_path),
        "字符数": char_count,
        "作者": props.author,
        "创建时间": props.created.strftime("%Y-%m-%d") if props.created else "未知"
    }
except Exception as e:
    print(f"处理失败 {doc_path}: {e}")
    return None

folder = "./reports"
for filename in os.listdir(folder):
if filename.endswith(".docx"):
full_path = os.path.join(folder, filename)
result = analyze_doc(full_path)
if result:
print(f"{result['文件']} - {result['字符数']}字 - {result['作者']}")

跑一遍脚本,30份报告的字数和作者信息就全部提取出来了。小李把结果导出到Excel,圆满完成了任务。

总结
用python-docx处理Word文档属性与字数统计,核心就三点:doc.core_properties获取元数据、遍历doc.paragraphs和doc.tables统计文字、doc.sections访问页眉页脚。代码量不大,却能把重复劳动彻底自动化。下次领导再丢来一堆文档,就知道怎么优雅应对了。

目录
相关文章
|
自然语言处理 算法 搜索推荐
|
3月前
|
存储 人工智能 JSON
AI 应用开发的流程
AI应用开发重心转向“上下文管理”与“模型调优”,涵盖五大阶段:业务定义与选型(闭源/开源模型)、提示词工程、RAG数据增强、应用编排(LangChain/Agent)、评估迭代(LLM-as-a-judge)。强调Prompt优先、成本控制与教育场景多模态适配。
|
7月前
|
安全 C语言 Docker
从零开始学构建Docker镜像:4种实用方法+生产级实践规范
本文系统讲解Docker镜像构建四大方法,聚焦生产实践,涵盖环境搭建、Dockerfile规范、多阶段构建、安全管控与CI/CD集成,强调非root运行、镜像瘦身及可追溯Tag规范,助力开发者掌握从开发到生产的全链路容器化技能。
1834 5
|
存储 安全 数据安全/隐私保护
利用Python实现简单的文本加密与解密
利用Python实现简单的文本加密与解密
948 8
|
5月前
|
Python
用Python给PPT“加点戏”:让汇报秒变高光时刻
本文揭秘Python批量添加PPT动画的实战技巧,用`python-pptx`实现淡入、顺序出现等基础效果,借`Spire.Presentation`打造旋转淡出、逐行高亮等高级动画,直击手动调动画耗时、单一、难维护三大痛点,并附避坑指南与可复用模板,助你10分钟搞定专业动态汇报。(239字)
913 2
|
JavaScript 前端开发 开发工具
vscode工具使用教程
vscode工具使用教程
726 0
|
5月前
|
前端开发 开发工具 C++
VSCode下载 | Visual Studio Code免费安装使用保姆级教程(新手必看)
VSCode是微软开发的免费开源代码编辑器,支持Windows/macOS/Linux,集代码编辑、调试、Git集成于一体。其强大扩展生态(数万插件)、轻量快速、跨平台及中文支持,使其成为开发者首选。本文提供完整下载、安装、汉化与高效插件配置指南。(239字)
|
机器学习/深度学习 算法 计算机视觉
边缘检测评估方法:FOM、RMSE、PSNR和SSIM对比实验和理论研究
本文探讨了图像分割与边缘检测之间的关系,并通过实验评估了多种边缘检测指标的有效性。研究发现,常用的RMSE、PSNR和SSIM指标在海岸线检测任务中可能高估性能,而FOM(优点图)指标则能更准确地选择最佳边缘检测参数。实验结果表明,FOM在92.6%的情况下选择了更好的阈值,在66.3%的情况下选择了最佳阈值。此外,FOM通过考虑预测边缘与真实边缘之间的距离,提供了更合理的评估标准。本文不仅对海岸线检测有重要意义,还对医学图像分析、计算机视觉和遥感等多个领域具有广泛的应用价值。作者通过理论分析和实证研究,证明了FOM在边缘检测评估中的优越性。
1174 3
边缘检测评估方法:FOM、RMSE、PSNR和SSIM对比实验和理论研究
|
监控 安全 Linux
在Linux中,如何编写自动化脚本来执行重复性任务?
在Linux中,如何编写自动化脚本来执行重复性任务?
|
小程序 安全 Android开发
微信小程序中识别HTML标签的方法
微信小程序中识别HTML标签的方法
1275 1

热门文章

最新文章