如何用Python基于文件中字符串最后出现位置输出指定行
问题解决:找到最后一次"bring it on"后含err的行
问题描述
我有一个文本文件com.txt,内容如下:
Error logs are useful in many respects.
bring it on
A network or system administrator can resolve errors more quickly and easily with the information available
from the error logs
bring it on
[err] - not found
Error logs also could provide insights on ha
bring it on
cooll in this way
[err] - there is no way
hopefully
err - back
success
需要编写Python程序找到字符串bring it on的最后一次出现位置,仅输出该位置之后包含err的行。预期输出:
[err] - there is no way
err - back
尝试了以下代码,但输出所有bring it on行,无法得到预期结果:
a = 'bring it on' with open('com.txt', 'r') as file_: line_list = list(file_) line_list.reverse() for line in line_list: if line.find(a)!= -1: # do something print(line)
解决思路
- 读取文件所有行,定位最后一次出现
bring it on的行索引 - 从该索引的下一行开始遍历,筛选出包含
err的行(可选择是否区分大小写)
修正后的代码
target_str = 'bring it on' match_str = 'err' with open('com.txt', 'r') as file: # 读取所有行并去除末尾换行符,避免输出空行 lines = [line.rstrip('\n') for line in file] # 记录最后一次出现目标字符串的行索引 last_occurrence_idx = -1 for idx, line in enumerate(lines): if target_str in line: last_occurrence_idx = idx # 筛选并输出符合条件的行 if last_occurrence_idx != -1: for line in lines[last_occurrence_idx + 1:]: # 若需严格匹配小写err,去掉.lower()即可 if match_str in line.lower(): print(line)
代码说明
- 读取文件时用
rstrip('\n')去除每行末尾的换行符,避免输出时出现多余空行 - 通过遍历所有行,持续更新目标字符串的出现索引,最终得到最后一次出现的位置
- 从最后一次出现位置的下一行开始,检查每行是否包含
err:- 用
line.lower()实现不区分大小写匹配(比如匹配Err、ERR等),如果需求是仅匹配小写err,删除该方法即可
- 用
- 直接输出符合条件的行,得到预期结果
内容的提问来源于stack exchange,提问作者Kelly
相关产品推荐
相关产品推荐

