Python实现逐行统计TXT文件中词组出现频率的正确方法
解决按短语统计文本行频率的问题
嘿,我一眼就瞅出问题所在啦!你现在的代码是把整个文本按单个单词拆分统计,但你实际想要统计的是每一行完整的短语(比如"Good Day"是一个整体),这就是输出和预期不符的核心原因。
问题根源
你用了text.split(None),这个方法会把所有空白字符(包括空格、换行)都当成分隔符,把整个文本拆成一个个独立的单词——自然就把"Good Day"拆成了"Good"和"Day"两个单独项来统计,结果肯定不对啦。
修改后的代码
我给你调整了代码,改成按行读取并统计每个完整短语的频率,同时用更规范的文件操作方式(with语句会自动帮你关闭文件,避免资源泄漏):
# 用with语句打开文件,自动处理关闭操作 with open("test.txt", "r") as file: phrase_freq = {} # 逐行读取文件,line就是每一行的内容 for line in file: # 去掉行尾的换行符和前后多余空格 phrase = line.strip() # 跳过空行(如果文件里有的话) if not phrase: continue # 统计短语频率 phrase_freq[phrase] = phrase_freq.get(phrase, 0) + 1 # 遍历统计结果输出(顺序不限的话直接遍历字典即可) for phrase, count in phrase_freq.items(): print(f"{phrase}: {count}")
为什么这样改?
- 按行读取:
for line in file会逐行读取文本内容,每一行就是你要统计的完整短语(比如"Hello"、"Good Day"),完美保留了短语的完整性。 strip()处理:去掉每行末尾的换行符\n以及前后可能存在的多余空格,保证短语的准确性。- 统计逻辑不变:还是用字典记录每个短语的出现次数,只是现在的统计对象是完整短语,而非单个单词。
测试效果
假设你的test.txt内容是每行一个短语:
Hello Hi Hello Good Day Hi Good Day Good Night Good Night
运行代码后会输出符合你预期的结果:
Hello: 2 Hi: 2 Good Day: 2 Good Night: 2
内容的提问来源于stack exchange,提问作者Alexandro
相关产品推荐
相关产品推荐

