如何使用Python逐行读取txt指定范围内容,匹配起始字符串且忽略空行
错误原因
你写的代码存在两个核心逻辑问题:
- 内层循环用
line作为迭代变量接收range(10)输出的0-9整数,此时判断line != '\n'是拿整数和换行字符串对比,条件永远成立,完全没有起到过滤空行的作用 - 现有逻辑是匹配到起始字符串后直接读取10行,空行也会占用计数,最终得到的有效非空行可能不足10行,不符合需求
修正后代码
a = [] start_flag = "Merl" target_line_num = 10 # 用with管理文件句柄,自动完成文件关闭操作,避免资源泄漏 with open("try2.txt", "r", encoding="utf-8") as file1: start_matched = False for line in file1: # 未匹配到起始行时仅做匹配判断 if not start_matched: if line.startswith(start_flag): start_matched = True continue # 匹配到起始行后,过滤全空白行(包括仅含空格、制表符的空白行) if line.strip(): a.append(line) # 凑够指定数量的有效行后直接终止循环 if len(a) == target_line_num: break print(a)
调整说明
- 新增起始行匹配状态标记,避免重复匹配、逻辑混乱
- 调整计数逻辑:仅当读取到非空白行时才计入总数,直到凑够10行有效内容再终止
- 用
strip()判断空白行,比直接判断line != '\n'更严谨,可以过滤掉仅含空格、制表符的无效空白行 - 改用
with上下文管理器操作文件,无需手动调用close(),更安全
内容的提问来源于stack exchange,提问作者Ella Maria
相关产品推荐
相关产品推荐

