我有一个文本文件,我想要数字" 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"在列表的元素
答案 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)...
,您也可以在第一次迭代时检查每一行,不需要将字符串添加到列表中然后再次迭代。为什么你只返回一个是最好的,因为所有的数据实际上只在一行上,你也在比较quack
到Quack
哪个不起作用,你需要降低字符串。