【问题标题】:count word in textfile计算文本文件中的单词
【发布时间】:2015-07-13 04:29:42
【问题描述】:

我有一个文本文件,我想在其中计算“quack”这个词。

名为“quacker.txt”的文本文件示例:

这是文本文件quack。 哦,那 quack 在 2009 年的考试中表现如何?\n 他以 9 个 P 和 1 个 B 的成绩通过了考试。\n 他说 >quack 他想在未来上大学\n 但他决定在那之前尝试在 YouTube 上发展自己的事业 Quack....\n 所以,到目前为止,一切进展顺利嘎嘎很好嘎嘎!!!!

所以这里我想要 7 作为输出。

readf= open("quacker.txt", "r")
lst= []
for x in readf:
  lst.append(str(x).rstrip('\n'))
readf.close()
#above gives a list of each row.
cv=0
for i in lst:
  if "quack" in i.strip():
    cv+=1

以上仅适用于列表元素中的一个“庸医”

【问题讨论】:

  • 数据是在一行还是不同行?

标签: python string file python-3.x


【解决方案1】:

如果文件不太长,你可以试试:

with open('quacker.txt') as f:
    text = f.read().lower() # make it all lowercase so the count works below
    quacks = text.count('quack')

正如@PadraicCunningham 在 cmets 中提到的,这也将计算“嘎嘎” 像“嘎嘎”或“嘎嘎”这样的词。但如果这不是问题,那就没问题了。

【讨论】:

  • 这也算庸医等等……而错过了嘎嘎
  • @PadraicCunningham 确实,我已经在答案中提请注意这一点,以防出现问题
  • 好吧,反正加一个,在简单的情况下它会起作用,任何更高级的东西都需要更多的工作。
【解决方案2】:

如果该行包含字符串,则加一,但如果该行出现多次“quack”怎么办?

尝试:

for line in lst:
    for word in line.split():
        if 'quack' in word:
            cv+=1

【讨论】:

    【解决方案3】:

    您需要降低、剥离和拆分才能获得准确的计数:

    from string import punctuation
    with open("test.txt") as f:
        quacks = sum(word.lower().strip(punctuation) == "quack"
                      for line in f for word in line.split())
        print(quacks)
    7
    

    您需要将文件中的每个单词拆分为单独的单词,否则使用 in 或 count 会导致误报。 word.lower().strip(punctuation) 降低每个单词并删除任何标点符号,sum 将在所有时间求和 word.lower().strip(punctuation) == "quack" 为真。

    在您自己的代码中,x 已经是一个字符串,因此无需调用str(x)...,您也可以在第一次迭代时检查每一行,无需将字符串添加到列表然后迭代第二次。为什么你只得到一个返回最像因为所有数据实际上都在一行上,你也在比较quackQuack,这不起作用,你需要降低字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多