Python如何统计多.docx文件词数并存入列表生成翻译自动化发票
翻译发票自动化docx词数统计问题修复
问题原因
你之前赋值只能拿到最后一个文件的词数,核心原因是没有在文件遍历循环内,把每次计算出的当前文件词数追加到list_words列表中,若在循环外给变量赋值,只会保留最后一次循环的计算结果。
原统计行逻辑拆解
len(re.findall(r'\w+', '\n'.join(newparatextlist)))的执行逻辑分3步:
'\n'.join(newparatextlist):将遍历得到的当前文档所有段落文本,用换行符拼接为完整的单条字符串,消除段落拆分存储的影响re.findall(r'\w+', 完整文本字符串):通过正则规则匹配所有连续的字符(字母、数字、下划线,符合常规英文单词的判定特征),返回包含所有匹配到单词的列表len(匹配结果列表):统计匹配列表的元素总数,得到的值就是当前文档的总词数
修正后可直接运行的代码
修正后代码会自动过滤非docx文件,生成的list_files和list_words索引一一对应,可直接用于后续写入Excel生成发票:
import os import re from docx import Document # 指定待统计文件的文件夹路径 folder = r'D:/Tulk_1' files = os.listdir(folder) list_files = [] list_words = [] for file in files: # 跳过非docx格式文件,避免读取报错 if not file.endswith('.docx'): continue # 拼接文件绝对路径,跨系统兼容 location = os.path.join(folder, file) list_files.append(file) # 读取文档收集所有段落文本 document = Document(location) paragraph_texts = [para.text for para in document.paragraphs] full_text = '\n'.join(paragraph_texts) # 计算词数并存入列表 current_word_count = len(re.findall(r'\w+', full_text)) list_words.append(current_word_count) # 打印单文件统计结果做校验 print(f"文件:{file} | 词数:{current_word_count}") # 校验最终列表输出 print("文件名列表:", list_files) print("对应词数列表:", list_words)
运行后list_words会输出你预期的[2950, 1068, 946, 788],和list_files顺序完全对应。
适配提示
如果你的待统计文件包含大量带连字符的专业术语、中文内容,可以将正则匹配规则替换为r'[\u4e00-\u9fa5]|\b[\w-]+\b',同时兼容中文字符和带连字符的单词统计,结果更准确。
内容的提问来源于stack exchange,提问作者Zixxy7
相关产品推荐
相关产品推荐

