如何使用Python实现ID关联的两个文本文件的搜索匹配与合并操作
Python实现两个文本文件按ID匹配合并
需求说明
现有两个结构不同的文本文件,需按ID关联合并,保留file1原有格式,仅将file2的匹配内容追加到file1对应a=行的末尾。
现有文件结构
file1.txt
a=id01 desc=sample1 attribute1 a=id02 desc=sample2 attribute1 attribute2 a=id05 desc=sample5 a=id03 desc=sample3 a=id04 desc=sample4
file2.txt
id01=sample text id01 id05=sample text id05 id02=sample text id02 id03=sample text id03 id04=sample text id04
预期输出(output.txt)
a=id01; id01=sample text id01 desc=sample1 attribute1 a=id02; id02=sample text id02 desc=sample2 attribute1 attribute2 a=id03; id03=sample text id03 desc=sample3 a=id04; id04=sample text id04 desc=sample4 a=id05; id05=sample text id05 desc=sample5
实现思路
- 优先读取file2构造ID映射字典,用ID做key、整行内容做value,后续匹配效率更高
- 逐行读取file1,判断行是否以
a=开头:- 是则提取行内ID,查字典匹配到对应内容后,用分号拼接写入输出文件
- 否则直接原样写入输出文件,保留原有格式、空行不变
完整代码
# 构造file2的ID映射字典 id_map = {} with open('file2.txt', 'r', encoding='utf-8') as f2: for line in f2: line_stripped = line.strip() # 跳过空行避免报错 if not line_stripped: continue # 限制只分割一次,避免值内容含=时出错 id_val = line_stripped.split('=', 1)[0] id_map[id_val] = line.rstrip('\n') # 处理file1并写入结果 with open('file1.txt', 'r', encoding='utf-8') as f1, open('output.txt', 'w', encoding='utf-8') as out_f: for line in f1: if line.startswith('a='): # 提取a=后的ID current_id = line.strip().split('=', 1)[1] if current_id in id_map: # 拼接后写入 new_line = f"{line.rstrip('\n')}; {id_map[current_id]}\n" out_f.write(new_line) continue # 非a=开头的行原样写入 out_f.write(line)
内容的提问来源于stack exchange,提问作者three to two
相关产品推荐
相关产品推荐

