Python3文本文件指定字符串查找失败问题求助及代码修正咨询
问题分析与解决方案
嘿,我一眼就瞅出问题所在啦!你的代码逻辑有个小bug——循环只检查了第一行就直接退出了。
你看,当前代码里,for循环每读一行,只要这行不包含目标字符串,就立刻执行else分支里的print和break,直接跳出整个循环。而你的文件第一行是This should work,根本不匹配,所以程序连第二行那个包含PermitRootLogin no的内容都没读到,就直接判定“未找到”了。
修正后的代码示例
先给你改好的代码,你可以直接用:
# 先初始化变量(别漏了这一步,不然会报未定义错误) num_of_points1 = 0 num_of_vulns1 = 0 is_found = False # 用with语句打开文件,会自动帮你关闭文件,更安全 with open("/home/cp/Desktop/config") as config_file: for line in config_file: if "PermitRootLogin no" in line: num_of_points1 += 4 num_of_vulns1 += 1 is_found = True # 如果只需要匹配一次就停止遍历,可以加上下面这行 # break # 遍历完所有行之后,再判断是否找到目标字符串 if not is_found: print('sshd_config is still vulnerable')
为什么这样改?
- 用
with语句管理文件:避免忘记关闭文件,也更符合Python的最佳实践。 - 新增
is_found标志:用来记录整个文件遍历过程中是否出现过目标字符串,而不是每一行都判断。 - 把提示逻辑移到循环外:只有当所有行都遍历完,确认没有找到目标字符串时,才打印提示信息,不会提前退出循环。
如果你的需求是找到所有匹配的行(比如文件里可能有多个PermitRootLogin no),那就去掉代码里的break,这样程序会遍历完所有行,累加所有匹配的次数。
内容的提问来源于stack exchange,提问作者lavarockman
相关产品推荐
相关产品推荐

