如何正确统计以#开头的文件行?现有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
相关产品推荐
相关产品推荐

