如何用Python筛选出下方有数据的带下划线标识字符串
提取带有有效数据的下划线标识条目及其对应数据
看起来你已经找对了方向,但差了关键的一步——记录下每个标识行的内容,这样当遇到有效数据时,就能把标识和数据对应起来输出。你的原代码只捕获了数据行,却没把前面的标识行存下来,所以才只输出了数据部分。
我们可以调整逻辑,核心思路是:
- 用一个变量保存最近碰到的标识行内容
- 遍历文件时,先判断当前行是不是标识行(包含你指定的特殊符号串),如果是就更新这个变量
- 当遇到非空的有效数据行(比如包含
tcp的行),就把之前保存的标识行和当前数据行一起输出
下面是修正后的代码:
# 初始化变量存储最近的标识行 last_identifier = "" # 定义标识行的特征字符串 marker = "鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��" with open("tran", "r") as lb: for line in lb: stripped_line = line.strip() # 判断当前行是不是标识行 if marker in line: # 更新最近的标识行,保留原格式(去掉strip的话可以保留换行) last_identifier = line.rstrip('\n') # 判断当前行是有效数据行(非空且不是标识行) elif stripped_line and 'tcp' in stripped_line: # 输出标识行和数据行 print(last_identifier) print(stripped_line)
代码逻辑解释:
last_identifier:专门用来存最近遇到的标识行,这样当后面出现数据时,我们能知道这组数据属于哪个标识- 先处理标识行:只要行里包含那个特殊符号串,就把它存起来
- 然后处理数据行:如果行非空且包含
tcp(你的有效数据特征),就把之前存的标识行和当前数据行一起打印 - 空行会被自动跳过,因为
stripped_line为空时不会进入第二个判断分支
用这个代码处理你的示例数据,就能得到你想要的输出:
ganter 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�� tcp 0 0 D tcp 0 0 D tcp 0 0 D
如果你的数据里有效数据行可能有多行(比如一个标识后面跟着好几行数据),这个逻辑也能正常工作,因为每次遇到数据行都会输出最近的标识行。
内容的提问来源于stack exchange,提问作者krock1516
相关产品推荐
相关产品推荐

