You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python 3统计文件特定三字短语时计数异常的问题求助

问题排查与修复方案

嘿,你的代码里有两个核心问题,直接导致了计数异常的情况:

  1. 文件读取的指针陷阱f.read()会一次性把整个文件内容读出来,同时把文件的读取指针移到文件末尾。等你循环到第二个短语时,再调用f.read()就只能读到空字符串了,所以后续所有短语的计数都是0。
  2. 变量引用的引号错误:你写的contents.count('word')里,'word'是一个固定的字符串字面量,而不是循环里的变量word。所以第一个短语的计数其实是在统计文件里字符串'word'出现的次数,而不是你第一个目标短语的次数——这就是为什么第一个数总是63啦。

修复后的基础版本代码

phrases = ['hi there you','eat sausage bread', ...]

# 先把文件内容一次性读出来存在变量里,循环里直接用这个变量就行
with open('test.txt') as f:
    contents = f.read()

# 遍历每个短语统计次数
for phrase in phrases:
    count = contents.count(phrase)
    print(phrase, count)

针对大量文件与短语的优化方案

考虑到你有100多个短语和大量文件,这里给你两个实用优化方向:

  • 单文件多短语高效处理:对每个文件只读取一次内容,然后循环所有短语统计(就是上面的基础逻辑),避免重复打开/读取文件,能节省不少时间;
  • 大文件内存优化:如果你的文件特别大,一次性读取会占太多内存,可以按行读取,逐行累加每个短语的计数:
phrases = ['hi there you','eat sausage bread', ...]
# 先给每个短语初始化计数为0
phrase_counts = {p: 0 for p in phrases}

with open('test.txt') as f:
    # 逐行读取文件,每行统计一次所有短语
    for line in f:
        for phrase in phrases:
            phrase_counts[phrase] += line.count(phrase)

# 输出所有结果
for phrase, count in phrase_counts.items():
    print(phrase, count)

这个逐行读取的方式,内存占用会小很多,适合处理超大文件。

内容的提问来源于stack exchange,提问作者Max Power

火山引擎 最新活动