python 文件处理无法搜索所有单词

python file handling can't search all words

尝试使用 python 文件处理来搜索单词在文件中出现的次数。例如试图在信徒歌曲的歌词中搜索 'believer' 信徒来了多少次。它出现了 18 次,但我的程序给出了 12 次。我缺少什么条件。

def no_words_function():
  f=open("believer.txt","r")
  data = f.read()
  cnt=0
  ws = input("Enter word to find: ")
  word = data.split()
  for w in word:
    if w in ws:
      cnt+=1
  f.close()
  print(ws,"found",cnt,"times in the file.")

no_words_function()

如果您在搜索时不考虑驼峰式大小写,假设输入的单词是小写的,您可以添加以下代码:

  for w in word:
    if ws.lower() in w.lower():
      cnt+=1

你只找到 18 次“相信者”出现的 12 次的原因是因为你在 for 循环中进行了测试。

而不是写作


if w in ws:
  cnt+=1

你应该颠倒顺序

if ws in w:
    cnt+=1

要了解原因,让我们看一下您测试的其中一行:You break me down, you build me up, believer, believer。如果拆分此行,您会得到以下结果:

line = "You break me down, you build me up, believer, believer"
line.split()
Out[26]: 
['You', 'break', 'me', 'down,',
 'you', 'build', 'me', 'up,',
 'believer,', 'believer']

如您所见,此列表中的第九个元素是 believer,。如果您测试 'believer,' in 'believer',结果将是 False。但是,如果您测试 'believer' in 'believer,',结果将是 True

正如其他人所提到的,如果您想忽略大小写,将搜索字符串和搜索词转换为小写也是一个好主意。

您没有清理尾随字符的数据,这些字符可以是 ,"、'.'等。这意味着您的代码不会在文本中找到“信徒”

你也不是在做个案比较。这意味着您的代码不会在文本中找到“Believer”。根据您的搜索需求,您可能想要这样做。

清理数据:

word = data.split()
word = [w.strip("'\".,") for w in word] # Add other trailing characters you do not want

对于不区分大小写的搜索:

word = [w.lower() for w in word]