统计文件中非特殊字符开头行总数时计数器返回0的问题排查
问题原因
你代码的核心问题出在文件指针的位置:readlines()方法会一次性读取文件全部内容,读取完成后文件指针会移动到文件的末尾位置。你在统计总行数时已经调用过一次site.readlines(),后续第二次调用site.readlines()时,已经没有内容可以读取,只能拿到空列表,for循环不会执行,所以count的数值始终为0。
修复方案
方案1:一次性读取所有行缓存到本地变量
适合文件体积不大的场景,仅读取一次文件,后续直接操作内存中的行列表即可:
def get_atom_number(): count = 0 with open(sitefile,'r') as site: # 仅读取一次文件,把所有行存在列表中复用 lines = site.readlines() total = len(lines) for line in lines: # 优化判断逻辑:仅判断行开头是否为特殊字符,避免行中间出现特殊符号时误判 if line.lstrip().startswith(('#', '%')): count += 1 return total - count
方案2:单循环同步统计两个数值
适合大文件场景,不需要一次性把整个文件加载到内存,遍历一次就可以同时统计总行数和特殊行数量,性能更高:
def get_atom_number(): total_line = 0 special_line = 0 with open(sitefile, 'r') as site: for line in site: total_line += 1 if line.lstrip().startswith(('#', '%')): special_line += 1 return total_line - special_line
内容的提问来源于stack exchange,提问作者user175924
相关产品推荐
相关产品推荐

