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

如何正确统计以#开头的文件行?现有Python脚本统计异常

搞定配置文件注释行统计的问题

嘿,我看你写的Python脚本本来想统计以#开头的行,但现在把所有包含#的行都算进去了——核心问题出在正则表达式的写法上,我来帮你修正!

原代码的问题

你用的正则r'#*'是个“小坑”:*在正则里表示匹配0次或多次,这意味着任何行都会匹配成功——哪怕行里没有#,0次匹配也满足条件,所以脚本其实在统计文件的总行数,而不是你想要的注释行。

两种修正方案,任你选

方案1:修正正则表达式

要匹配行首的#,得用行首锚点^,把正则改成r'^#',这样就只会匹配以#开头的行:

import re
def count_comment_lines():
    with open('test.conf', 'r') as rf:
        hit_count = 0
        for line in rf:
            # 严格匹配行首就是#的情况
            if re.search(r'^#', line):
                hit_count += 1
        print(hit_count)

count_comment_lines()

如果你的配置文件里有**行首带空格再跟#**的注释(比如 # 这是注释),可以把正则改成r'^\s*#',\s*会匹配0次或多次空白字符,这样这类行也能被统计到。

方案2:用字符串方法更高效(推荐)

其实根本不需要正则模块,Python字符串自带的startswith()方法就能搞定,代码更简洁,运行也更快:

def count_comment_lines():
    with open('test.conf', 'r') as rf:
        hit_count = 0
        for line in rf:
            # 先去掉行首尾空白,再判断是否以#开头,兼容带前导空格的注释
            if line.strip().startswith('#'):
                hit_count += 1
        print(hit_count)

count_comment_lines()

要是你只想统计完全没有前导空白、直接以#开头的行,去掉strip()就行,直接用line.startswith('#')。

测试结果

用你提供的test.conf内容测试,两种方案都会输出预期的4,完美符合需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:36:07