地震学事件文件清洗:移除首行含'RSN 3'的事件求助
解决地震事件文件中完整删除含'RSN 3'事件的问题
我明白你的问题了——你想完整删除首行包含'RSN 3'的整个地震事件,但当前代码只删掉了首行,事件的其余内容还是保留了下来。咱们来一步步解决这个问题:
问题根源分析
你当前的代码逻辑里,只是在检测到'RSN 3'时跳过了首行的累加,但没有标记整个事件都需要跳过。后续该事件的其他行依然会被加到eventInfo中,当遇到空行时,这个不完整(其实是除首行外的其余内容)的事件还是会被写入到输出文件里,这就是为什么只删了首行的原因。
修改后的代码
我们需要添加一个标记变量来跟踪是否要跳过当前事件,完整代码如下:
import os # 假设这些变量已提前初始化:refcatname, catdir, fileId, subFile, eventInfo, eventCounter # 新增标记变量,用于跟踪是否跳过当前事件 skip_event = False with open(refcatname) as fileContent: for l in fileContent: # 检查是否是事件首行(判断位置45-51的内容) check_rsn_3 = l[45:51] if check_rsn_3 == "RSN 3": line = l[:-1] check_event = line[1:15] print(check_event, check_rsn_3) # 标记当前事件需要跳过 skip_event = True # 跳过该行的后续处理 continue # 如果当前事件需要跳过 if skip_event: # 检查是否到了事件结束的空行 if not l.strip(): # 事件结束,重置跳过标记 skip_event = False # 跳过该行的所有处理 continue # 正常处理需要保留的事件 if not l.strip(): subFile.write( eventInfo + "\n" ) eventInfo = "" # 重置事件信息 eventCounter += 1 if eventCounter == 700: subFile.close() fileId += 1 subFile = open( os.path.join( catdir, "Paquete_Continental_" + str(fileId) + ".out", ), "w+", ) eventCounter = 0 else: eventInfo += l subFile.close()
代码逻辑说明
- 新增
skip_event布尔变量,默认值为False,表示默认不跳过事件 - 当检测到某行是'RSN 3'的事件首行时,设置
skip_event为True,并跳过该行的后续处理 - 在处理每一行前,先检查
skip_event是否为True:如果是,就跳过该行的累加操作,直到遇到事件结束的空行时,重置skip_event为False,准备处理下一个事件 - 只有当
skip_event为False时,才会正常执行原有的事件内容累加和写入逻辑
这样就能确保整个含'RSN 3'的事件(包括首行和所有后续行)都会被完整跳过,不会写入到输出文件中。
内容的提问来源于stack exchange,提问作者Juan Sebastián Osorno Bolívar
相关产品推荐
相关产品推荐

