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访问页眉页脚。代码量不大,却能把重复劳动彻底自动化。下次领导再丢来一堆文档,就知道怎么优雅应对了。

目录
相关文章
|
15天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
34803 41
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
9天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
10095 30
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
5天前
|
人工智能 JavaScript Ubuntu
低成本搭建AIP自动化写作系统:Hermes保姆级使用教程,长文和逐步实操贴图
我带着怀疑的态度,深度使用了几天,聚焦微信公众号AIP自动化写作场景,写出来的几篇文章,几乎没有什么修改,至少合乎我本人的意愿,而且排版风格,也越来越完善,同样是起码过得了我自己这一关。 这个其实OpenClaw早可以实现了,但是目前我觉得最大的区别是,Hermes会自主总结提炼,并更新你的写作技能。 相信就冲这一点,就值得一试。 这篇帖子主要就Hermes部署使用,作一个非常详细的介绍,几乎一步一贴图。 关于Hermes,无论你赞成哪种声音,我希望都是你自己动手行动过,发自内心的选择!
2032 21
|
27天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
45691 155
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
2天前
|
人工智能 自然语言处理 安全
|
9天前
|
机器学习/深度学习 存储 人工智能
还在手写Skill?hermes-agent 让 Agent 自己进化能力
Hermes-agent 是 GitHub 23k+ Star 的开源项目,突破传统 Agent 依赖人工编写Aegnt Skill 的瓶颈,首创“自我进化”机制:通过失败→反思→自动生成技能→持续优化的闭环,让 Agent 在实践中自主构建、更新技能库,持续自我改进。
1640 5
|
16天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
5794 26
|
7天前
|
IDE Java 编译器
【全网最详细】JDK17下载安装图文教程 | Java17编程环境搭建步骤详解
JDK 17是Java官方长期支持(LTS)版本,提供编译、调试、运行Java程序的完整工具链。具备高稳定性、强安全性及现代语言特性(如密封类、模式匹配),广泛用于企业开发、教学入门与生产环境,是学习和实践Java的首选基础工具。(239字)
1197 15