Python Word统计字数段落数:批量统计文档信息
用python-docx批量统计Word文档的字数、段落数、表格数、页数估算,适合审查稿件、统计工作量、生成文档清单报表,输出CSV一览。
场景痛点
编辑部门一堆稿件,要统计每篇多少字、多少段落、多少表格,用来算稿费或查重前筛查。手动一个个打开Word看状态栏,几十篇下来眼睛都花。用python-docx批量扫描整个文件夹,一次性输出CSV报表,哪篇超长、哪篇是空的一眼看清。
用到的库
pip install python-docx
完整代码
# -*- coding: utf-8 -*-
"""
批量统计 Word 文档的字数、段落数、表格数
"""
from pathlib import Path
import csv
from docx import Document
def count_chinese_and_words(text: str):
"""统计一段文本里的中文字符数和英文单词数"""
chinese = sum(1 for ch in text if '\u4e00' <= ch <= '\u9fff')
# 英文按空格分词
import re
english_words = len(re.findall(r'[a-zA-Z]+', text))
return chinese, english_words
def analyze_docx(doc_path: Path) -> dict:
doc = Document(str(doc_path))
# 段落统计
total_paragraphs = len(doc.paragraphs)
non_empty_paragraphs = sum(1 for p in doc.paragraphs if p.text.strip())
# 全文本(段落 + 表格)
all_text = []
for p in doc.paragraphs:
all_text.append(p.text)
table_cells = 0
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
all_text.append(cell.text)
table_cells += 1
full_text = '\n'.join(all_text)
chinese_chars, english_words = count_chinese_and_words(full_text)
total_chars = len(full_text.replace(' ', '').replace('\n', ''))
return {
"文件名": doc_path.name,
"段落数(总)": total_paragraphs,
"非空段落": non_empty_paragraphs,
"表格数": len(doc.tables),
"表格单元格数": table_cells,
"中文字符": chinese_chars,
"英文单词": english_words,
"总字符数(不含空格换行)": total_chars,
}
def batch_stat(input_dir, output_csv):
input_dir = Path(input_dir)
docx_files = [f for f in input_dir.glob("*.docx") if not f.name.startswith("~$")]
print(f"共 {len(docx_files)} 个文档待统计")
rows = []
for docx_file in docx_files:
try:
info = analyze_docx(docx_file)
rows.append(info)
print(f"✓ {info['文件名']}: 中文{info['中文字符']}字 / 段落{info['段落数(总)']}")
except Exception as e:
print(f"✗ {docx_file.name} 失败:{e}")
# 写 CSV,utf-8-sig 让 Excel 直接打开不乱码
if rows:
with open(output_csv, "w", newline="", encoding="utf-8-sig") as f:
writer = csv.DictWriter(f, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)
print(f"\n报表已生成:{output_csv}")
if __name__ == "__main__":
batch_stat(
input_dir="./word_docs",
output_csv="./word_stats.csv",
)
代码讲解
count_chinese_and_words() 用Unicode范围 \u4e00-\u9fff 判断中文字符,这是中日韩统一表意文字的主区段,覆盖常用汉字。英文单词用正则 [a-zA-Z]+ 匹配连续字母序列,比单纯按空格split更准。
analyze_docx() 把段落和表格单元格的文本全部拼到 all_text 列表里,再统一统计。这样表格里的字数也会被算进去,和Word状态栏的"字数"口径接近。
最后用 csv.DictWriter 写CSV,utf-8-sig 编码保证Excel双击打开中文不乱码。
运行结果
控制台逐个打印每个文件的字数和段落数。同目录下生成 word_stats.csv,用Excel打开后按"中文字符"列降序排序,哪篇稿件超量、哪篇不足一目了然。
注意事项
- python-docx 拿不到Word里"页数"和"字数统计"对话框里的精确数字,因为那些是Word渲染后算出来的。本脚本统计的字符数和Word状态栏有小幅差异(不含标点空格),做内部估算够用。
- 页眉页脚、文本框里的文字没算进去,需要的话遍历
doc.sections[i].header.paragraphs。 - 加密文档或带宏的docm文件可能打不开,会在控制台报错跳过。
- 统计时把整个文档文本读进内存,单文件超过100MB时注意内存。

更新时间:2026-09-15 08:54:23