Python实现GUI选择多Word文档统计字符数并存为变量
Word文档字符数统计实现方案
你最初编写的代码调用len(all_paras)仅返回文档的段落总数,没有读取段落内的实际文本内容,自然无法统计字符数。以下是两个需求的具体实现方式:
单个Word文档总字符数统计
如果仅需处理.docx格式文档,使用python-docx即可实现,注意统计时需要同时覆盖普通段落、表格内的文本,避免漏算内容。
- 安装依赖:
pip install python-docx
- 统计代码:
import docx def count_docx_chars(file_path, count_space=True): """ 统计docx文档字符数 :param file_path: 文档路径 :param count_space: 是否统计空格、换行、制表符等空白字符 """ doc = docx.Document(file_path) total_text = "" # 拼接所有普通段落文本 for para in doc.paragraphs: total_text += para.text # 拼接所有表格内的文本,避免漏算 for table in doc.tables: for row in table.rows: for cell in row.cells: total_text += cell.text # 不需要统计空白字符时执行过滤 if not count_space: total_text = total_text.replace(" ", "").replace("\t", "").replace("\n", "") return len(total_text) # 调用示例 total_chars = count_docx_chars("example.docx") print(total_chars)
如果需要兼容老版本.doc格式,可以替换为textract库实现,该库支持绝大多数文档格式的文本提取,仅需将统计逻辑替换为文本提取后计算长度即可。
批量统计+GUI多选+独立变量存储
使用Python自带的tkinter库实现文件多选对话框,无需额外安装GUI依赖,选中文件后按顺序将字符数赋值给a、b、c...的独立变量,满足后续直接调用变量的需求。
完整实现代码:
import tkinter as tk from tkinter import filedialog import docx def count_docx_chars(file_path, count_space=True): doc = docx.Document(file_path) total_text = "" for para in doc.paragraphs: total_text += para.text for table in doc.tables: for row in table.rows: for cell in row.cells: total_text += cell.text if not count_space: total_text = total_text.replace(" ", "").replace("\t", "").replace("\n", "") return len(total_text) # 初始化tkinter并隐藏主窗口 root = tk.Tk() root.withdraw() # 弹出多文件选择对话框,仅显示Word格式文件 selected_files = filedialog.askopenfilenames( title="选择需要统计的Word文档", filetypes=[("Word文档", "*.docx *.doc")] ) # 按选中顺序为每个文档的字符数分配独立变量a/b/c... for index, file_path in enumerate(selected_files): # 生成对应变量名:第1个文件对应a,第2个对应b,以此类推 var_name = chr(ord('a') + index) # 统计当前文档字符数 char_num = count_docx_chars(file_path) # 注册为全局变量,后续可直接调用 globals()[var_name] = char_num # 调用示例:选中4个文件时,直接执行print(a)可输出第1个文档字符数,print(d)输出第4个文档字符数 # print(a) # print(d)
注意事项
- 如果需要统计的文件数量超过26个,单字母变量名会出现冲突,可以将变量名生成规则修改为
f"doc_{index+1}_chars",对应变量为doc_1_chars、doc_2_chars,按需调整即可 - 如果需要兼容
.doc格式,将代码中的count_docx_chars函数替换为textract版本的文本提取统计逻辑即可 - 如果不需要统计空白字符,调用统计函数时传入
count_space=False参数
内容的提问来源于stack exchange,提问作者Noob-Programmer
相关产品推荐
相关产品推荐

