计算文本文件中的单词

时间:2015-05-03 20:35:22

标签: python string file python-3.x

我有一个文本文件,我想要数字" quack"英寸

textfile命名为" quacker.txt"例如:

这是文本文件 quack 。 哦,以及嘎嘎在2009年的考试中做了什么嘎嘎呢?\ n嗯,他通过九个P等级和一个B. \ n他说嘎嘎他希望在未来的大学里上学,但决定尝试在YouTube之前在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

以上只适用于一个" quack"在列表的元素

3 个答案:

答案 0 :(得分:2)

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

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

正如@PadraicCunningham在评论中所提到的,这也算上了'嘎嘎' 像'quacks'或'quacking'这样的词。但如果这不是问题,那就没关系。

答案 1 :(得分:1)

如果该行包含字符串,则递增1,但如果该行多次出现'quack'会怎样?

尝试:

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

答案 2 :(得分:1)

您需要降低,剥离和拆分以获得准确的计数:

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"为True。

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