You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Python统计词频时出现的TypeError: 'str' object is not callable错误?

解决你的Python词频排序&CSV导出问题

嘿,我来帮你搞定这个报错和需求!先给你拆解问题,再给你修正后的完整代码,还包含你想要的CSV导出功能。

首先分析报错原因

你遇到的TypeError: 'str' object is not callable是因为字符串格式化语法错误:

  • 你写的是print("%s : %i %" (word, frequency)),这里把格式化字符串当成了函数去调用(用了括号),而且还多了一个多余的%。
  • 正确的用法应该是用%运算符连接格式化字符串和参数元组:"%s : %i" % (word, frequency)

还有几个需要优化的小问题

除了报错,代码还有几个可以完善的地方:

  • 用split(" ")分割文本会产生空字符串(比如连续空格、换行的情况),应该用默认的split(),它会自动处理所有空白字符(空格、换行、制表符等)。
  • 你在words_and_frequencies里把单词包成了列表[word],后面打印的时候会输出类似[apple] : 5的格式,没必要,直接存word就行。

修正后的完整代码(含CSV导出)

下面是修复了报错、优化了逻辑,并且添加了CSV导出功能的代码:

from collections import defaultdict
import csv

# 第一步:统计参考文档的词频
occurrences = defaultdict(int)
with open("booksandtranscripts.txt", "r", encoding="utf-8") as file:
    books_content = file.read()
# 用默认split()分割,自动处理所有空白字符
for word in books_content.split():
    occurrences[word] += 1

# 第二步:获取目标文档的单词,并匹配词频
words_with_frequencies = []
with open("allminow.txt", "r", encoding="utf-8") as file:
    allminow_content = file.read()
for word in allminow_content.split():
    # 直接存(词频, 单词),注意这里如果单词不存在,defaultdict会返回0
    words_with_frequencies.append((occurrences[word], word))

# 第三步:按词频排序(默认升序,想要降序可以加reverse=True)
# 注意sorted的时候,我们要按词频排序,所以排序后元素是(频率, 单词),需要交换顺序打印
for frequency, word in sorted(words_with_frequencies, reverse=True):
    print(f"{word} : {frequency}")  # 也可以用f-string,比%格式化更直观

# 第四步:导出到CSV文件
with open("word_frequencies.csv", "w", newline="", encoding="utf-8") as csvfile:
    writer = csv.writer(csvfile)
    # 写入表头
    writer.writerow(["单词", "词频"])
    # 写入数据,注意交换顺序,让CSV里是单词在前,词频在后
    for frequency, word in sorted(words_with_frequencies, reverse=True):
        writer.writerow([word, frequency])

代码说明

  1. 我把变量名改成了更规范的occurrences(你之前拼写成了occurences,虽然不影响运行,但规范更好)。
  2. 添加了encoding="utf-8",避免读取/写入文件时出现编码问题。
  3. 用了更直观的f-string格式化打印,你也可以继续用%格式化,只要语法正确就行。
  4. CSV导出部分用了Python内置的csv模块,确保格式正确,不会出现逗号分隔的问题。
  5. 排序时加了reverse=True,这样词频高的单词排在前面,如果你想要升序可以去掉这个参数。

内容的提问来源于stack exchange,提问作者Youssef A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:28:57