如何用Python按事件关联规则合并两个文本文件
合并事件与关联数据文件的实现方案
可以用Python脚本完成两个文件的对应合并,核心思路是先把第二个文件中的每个数据块提取出来,再和第一个文件的事件行一一对应输出。
步骤说明
- 提取第二个文件的数据块:以
sta phase time wt为分隔符,将每个事件对应的关联数据存为独立的列表元素。 - 读取第一个文件的事件行:过滤出所有以
#开头的事件记录。 - 一一对应输出:将每个事件行与其对应的数据块内容依次写入结果文件。
Python代码实现
# 读取并解析第二个文件的关联数据块 with open('station_data.txt', 'r', encoding='utf-8') as data_file: # 读取所有非空行并去除首尾空白 all_lines = [line.strip() for line in data_file if line.strip()] event_data_blocks = [] current_block = [] separator = 'sta phase time wt' for line in all_lines: if line == separator: # 遇到分隔符时,将当前已收集的块存入列表(如果不为空) if current_block: event_data_blocks.append(current_block) current_block = [] else: # 非分隔符行加入当前块 current_block.append(line) # 处理最后一个未被存入的块(如果存在) if current_block: event_data_blocks.append(current_block) # 读取第一个文件的事件行 with open('events.txt', 'r', encoding='utf-8') as event_file: event_lines = [line.strip() for line in event_file if line.strip() and line.startswith('#')] # 合并并写入结果文件 with open('merged_result.txt', 'w', encoding='utf-8') as output_file: # 用zip将事件行和数据块一一配对 for event, data_block in zip(event_lines, event_data_blocks): # 写入事件行 output_file.write(f"{event}\n") # 写入对应的数据块内容 for data_line in data_block: output_file.write(f"{data_line}\n") # 可选:每个事件后添加空行分隔,增强可读性 output_file.write("\n")
注意事项
- 确保第一个文件的事件数量和第二个文件的数据块数量完全对应,否则
zip会以较短的一方为准,忽略多余的内容。 - 如果需要处理数量不匹配的情况,可以添加判断逻辑(比如对多余的事件或数据块单独处理)。
- 替换代码中的文件名
station_data.txt、events.txt、merged_result.txt为你实际使用的文件路径。
内容的提问来源于stack exchange,提问作者rainzx27
相关产品推荐
相关产品推荐

