如何统计目录下所有文件中指定关键词的总出现次数
如何统计目录下所有文件中指定关键词的总出现次数
嘿,我来帮你搞定这个问题!你现在已经能统计单个文件里的关键词出现次数了,要汇总总次数其实很简单,咱们先从修改你现有的代码开始~
方案一:修改你原有代码实现总统计
你之前的代码每次循环文件时都会重新创建统计字典,导致无法累加总次数。只需要把总计数器移到文件循环外面,每次读取文件后把当前文件的统计结果累加到总计数器里就行:
import re keywords = ['river'] # 初始化总计数器,给每个关键词设置初始值0 total_keywords = {key: 0 for key in keywords} # 这里替换成你的文件路径列表,比如用glob或pathlib获取所有目标文件 docs = ["file1.txt", "file2.txt", "subdir/file3.txt"] for doc in docs: with open(doc, 'r') as file: data = file.read() # 统计当前文件的关键词出现次数 current_found = {} for key in keywords: # 忽略大小写匹配关键词 found = re.findall(key, data, re.I) current_count = len(found) current_found[key] = current_count # 把当前文件的次数累加到总计数器 total_keywords[key] += current_count # 打印单个文件的统计结果(可选) print(f"文件 {doc} 的统计结果:{current_found}") # 最后输出所有文件的总统计 print("\n=== 所有文件的总统计结果 ===") for key, count in total_keywords.items(): print(f"关键词 '{key}' 总共出现了 {count} 次")
分析你之前尝试的错误
第一个Counter方案的问题
你把文件循环嵌套在了关键词循环里面,不仅效率低,还可能因为变量未定义(比如your_list_of_words没替换成实际的关键词列表)导致报错。调整循环顺序后的正确写法如下:
import re from collections import Counter from pathlib import Path keywords = ['river'] counter = Counter() # 先遍历目录下所有txt文件 for file in Path("你的目录路径").glob("*.txt"): with open(file, 'r') as stream: data = stream.read() # 遍历每个关键词,统计当前文件中的匹配次数并更新计数器 for word in keywords: matches = re.findall(word, data, re.I) counter.update(matches) # 输出总统计 for word in keywords: print(f"关键词 '{word}' 总出现次数:{counter[word]}")
第二个正则方案的问题
你写的word - 'river'是语法错误(应该用等号word = 'river'),而且all_docs没有定义——你需要先把所有文件的内容合并成一个字符串,再进行统计:
import re from pathlib import Path word = 'river' all_content = "" # 读取所有文件内容合并成一个字符串 for file in Path("你的目录路径").glob("*.txt"): with open(file, 'r') as f: all_content += f.read() + "\n" # 加换行避免单词被截断 # 用边界匹配确保统计的是完整单词(可选,根据你的需求调整) total_count = len(re.findall(fr"\b{word}\b", all_content, re.I)) print(f"关键词 '{word}' 总出现次数:{total_count}")
备注:内容来源于stack exchange,提问作者Dez Miller
相关产品推荐
相关产品推荐

