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

Python实现查找文本文件中包含指定字符串的所有行

解决文本文件多行匹配字符串的问题

问题说明

需求是打印出文本文件中包含指定字符串AP/VLAN的所有行,示例文件内容如下:

Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * monitor
         * mesh point
         * P2P-client
         * P2P-GO
--
    Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * monitor
         * P2P-client
         * P2P-GO
         * P2P-device

但编写的代码只输出了第一个匹配行的信息,实际文件里有两行符合条件,需要调整代码实现全量匹配输出。原代码如下:

findString = "AP/VLAN"

with open('interfaces.txt') as f:
    lines = f.readlines()
    for line in lines:

        if line.find(findString) != -1:
            print('String Found in Line Number:', lines.index(line) + 1)
            print('Line Content:', line)

问题根源

不是代码提前停止运行了,而是lines.index(line)这个方法的坑——它只会返回第一个和当前行内容相同的元素索引。比如示例里两行* AP/VLAN内容完全一致,第二次循环到这行时,index()还是返回第一行的位置,导致你看到输出的行号重复,误以为只找到了第一个匹配项。

修改后的代码

直接用enumerate()遍历文件,它能同时拿到行号和行内容,既解决了索引问题,还能省内存(不用一次性把所有行读进内存):

findString = "AP/VLAN"

with open('interfaces.txt') as f:
    # start=1让行号从1开始计数,符合日常阅读习惯
    for line_num, line in enumerate(f, start=1):
        # 用in判断字符串存在,比find方法更直观
        if findString in line:
            print('String Found in Line Number:', line_num)
            # end=''避免重复换行,因为每行本身自带换行符
            print('Line Content:', line, end='')

运行结果

执行后会正确输出两个匹配行的信息:

String Found in Line Number: 5
Line Content:          * AP/VLAN
String Found in Line Number: 14
Line Content:          * AP/VLAN

内容的提问来源于stack exchange,提问作者Damien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:37:39