Python兼容doc/docx统计字符数 计算后导出排序去后缀xlsx
Word文档字符统计脚本改造实现
实现目标
- 同时兼容
.doc、.docx两种后缀的Word文档字符统计 - 统计规则:单文件计算值 = 文件总字符数 / 65,最终结果导出为xlsx表格
- 导出规则:文件名自动移除.doc/.docx后缀,按文件名中的数字序号自然排序,表格末尾统计所有文件计算值的总和
依赖安装
执行以下命令安装需要的第三方库:
pip install python-docx openpyxl pywin32
注:
pywin32仅支持Windows环境,是读取旧版.doc格式兼容性最好的方案;如果是macOS/Linux环境,可以替换为textract库搭配系统antiword组件实现.doc读取。
完整可运行代码
import os import re import docx import win32com.client as win32 from openpyxl import Workbook def get_docx_char_count(file_path): """读取docx文件总字符数""" doc = docx.Document(file_path) return sum(len(p.text) for p in doc.paragraphs) def get_doc_char_count(file_path): """读取doc文件总字符数(Windows环境)""" word = win32.gencache.EnsureDispatch('Word.Application') word.Visible = False doc = word.Documents.Open(os.path.abspath(file_path)) char_count = 0 for p in doc.Paragraphs: char_count += len(p.Range.Text) doc.Close() word.Quit() return char_count def natural_sort_key(filename): """自然排序键,按文件名中的数字排序,避免字符串排序的序号错乱""" name_without_ext = os.path.splitext(filename)[0] return [int(part) if part.isdigit() else part.lower() for part in re.split(r'(\d+)', name_without_ext)] if __name__ == '__main__': charCounts = {} # 遍历当前目录下所有文件 for filename in os.listdir('.'): # 跳过Word生成的临时文件 if filename.startswith('~$'): continue if filename.endswith('.docx'): count = get_docx_char_count(filename) pure_name = os.path.splitext(filename)[0] charCounts[pure_name] = count / 65 elif filename.endswith('.doc'): count = get_doc_char_count(filename) pure_name = os.path.splitext(filename)[0] charCounts[pure_name] = count / 65 # 按数字序号排序文件名 sorted_names = sorted(charCounts.keys(), key=natural_sort_key) # 生成Excel wb = Workbook() ws = wb.active # 写入表头 ws.cell(row=1, column=2, value='File Name') ws.cell(row=1, column=4, value='chars/65') # 逐行写入数据 total = 0 for idx, name in enumerate(sorted_names): row = idx + 3 val = charCounts[name] total += val ws.cell(row=row, column=2, value=name) ws.cell(row=row, column=4, value=val) # 写入总和行 total_row = len(sorted_names) + 3 ws.cell(row=total_row, column=2, value='总计') ws.cell(row=total_row, column=4, value=total) # 保存结果文件 wb.save('./charCounts.xlsx')
使用说明
- 运行脚本前请关闭所有正在打开的Word文档,避免文件占用导致读取失败
- 脚本默认统计自身所在目录下的所有Word文档,生成的
charCounts.xlsx结果文件也会保存在同目录 - 自然排序逻辑适配
1.doc、2.docx、10_报告.doc这类带数字序号的文件名,不会出现字符串排序下10排在2前的错乱问题
内容的提问来源于stack exchange,提问作者Cyper-Python
相关产品推荐
相关产品推荐

