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]
尝试使用 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]