You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:35:53