Python统计文本行首ATOM/HETATM出现次数异常问题排查
问题原因分析与解决
问题根源
你得到结果3的核心原因是误用了字符串count()方法——这个方法会匹配文本中所有出现的目标子串,而非仅统计以该子串开头的行。比如那行REMARK记录,虽然行首是REMARK,但内容里包含的"ATOM"会被count("ATOM")额外统计,加上真正的ATOM行和HETATM行,总数就变成了3,和预期的2不符。
典型错误代码示例
推测你的代码逻辑类似如下:
with open("b.txt", "r") as f: content = f.read() total = content.count("ATOM") + content.count("HETATM") print(total)
这种写法会把所有位置的"ATOM"和"HETATM"都纳入统计,不管它们是不是在行首。
正确实现方式
要精准统计以指定字符串开头的行,需要逐行检查每行的起始内容:
line_count = 0 with open("b.txt", "r") as file: for line in file: # 先去除换行符与首尾空白,避免行首空格导致的匹配失败 cleaned_line = line.strip() if cleaned_line.startswith("ATOM") or cleaned_line.startswith("HETATM"): line_count += 1 print(line_count)
这段代码通过startswith()方法严格匹配行首内容,只会统计真正符合要求的行,最终得到预期结果2。
额外提示
如果目标文件的行可能存在前导空格,务必先清理空白字符再做匹配,避免出现漏统计的情况;反之,如果行首空格是需要排除的条件,则跳过strip()步骤直接匹配原始行的起始内容。
内容的提问来源于stack exchange,提问作者Mehdi Irani
相关产品推荐
相关产品推荐

