文件单词查找逻辑异常:存在目标单词仍输出未找到提示
问题分析与修复方案
嘿,我一眼就揪出问题所在啦!你的代码最后那个判断逻辑完全搞错了对象,才会导致不管单词存不存在,都输出否定提示。
问题根源
你写的if (text not in fisier):这里,fisier是文件对象,不是文件里的文本内容啊!字符串怎么可能会存在于一个文件对象里呢?所以这个条件永远是True,自然每次都会弹出那个“没找到”的提示。
顺带提个小细节:你用fisier.readlines()读完文件后,文件指针已经移到末尾了,就算你想判断文本在文件内容里,这时候也读不到东西,但这不是核心问题。
修复步骤
我们需要用一个布尔变量来跟踪是否找到过匹配内容,具体修改如下:
- 新增
found变量,初始设为False,用来标记是否找到目标单词 - 每次找到匹配的行时,把
found设为True - 最后根据
found的值,决定是否输出否定提示 - 推荐用
with语句操作文件,它会自动帮你关闭文件,避免资源泄漏
修正后的代码
import sys def find(text, file): found = False # 标记是否找到匹配项 # 用with语句自动管理文件资源,不用手动关闭 with open(file, "r", encoding='UTF-8') as fisier: # 统一转小写实现不区分大小写匹配,比生成两个字符串更简洁 target_lower = text.lower() for line in fisier.readlines(): line_stripped = line.strip() line_lower = line_stripped.lower() if target_lower in line_lower: print(line_stripped) found = True # 找到匹配,更新标记 # 最后根据标记判断是否输出否定提示 if not found: upper_text = text[0].upper() + text[1:] print(f"{upper_text} wasn't found in {file}") def main(): find("obuz", "catastrofa.txt") if __name__ == "__main__": main()
额外优化说明
我把原来的首字母大小写判断改成了统一转小写的匹配方式,这样不管目标单词是大写开头、小写开头,还是行里的单词大小写如何,都能精准匹配到,逻辑更简洁健壮~
内容的提问来源于stack exchange,提问作者john doe
相关产品推荐
相关产品推荐

