从文本文件中移除info相同且data十六进制值相同的行
解决方案
实现思路
要完成需求,需要先统计每个info对应的所有data实际十六进制值,再筛选出那些info下存在不同data值的行:
- 解析每行的
info和data,把data转换成统一数值(忽略十六进制的大小写、前缀长度差异) - 记录每个
info对应的所有唯一data值集合 - 再次遍历原文件,只保留那些
info对应的data集合大小大于1的行
代码实现
import re # 第一步:统计每个info对应的所有唯一data数值 info_data_map = {} with open("in1.txt", "r") as fin: for line in fin: line = line.strip() if not line: continue # 提取info和data的值 info_match = re.search(r'info="(0x[0-9a-fA-F]+)"', line) data_match = re.search(r'data="(0x[0-9a-fA-F]+)"', line) if info_match and data_match: info = info_match.group(1).lower() # 统一info为小写,消除大小写差异 data_hex = data_match.group(1) data_value = int(data_hex, 16) # 转十进制,消除长度/大小写差异 # 更新info对应的data集合 if info not in info_data_map: info_data_map[info] = set() info_data_map[info].add(data_value) # 第二步:筛选符合条件的行写入out.txt with open("in1.txt", "r") as fin, open("out.txt", "w") as fout: for line in fin: line = line.rstrip('\n') if not line: continue info_match = re.search(r'info="(0x[0-9a-fA-F]+)"', line) if info_match: info = info_match.group(1).lower() # 仅保留该info下有多个不同data值的行 if len(info_data_map.get(info, set())) > 1: fout.write(line + '\n')
代码说明
- 用正则精准提取
info和data字段值,避免字符串分割的不稳定问题 - 将
info转为小写,确保0x00010AC3和0x00010ac3被识别为同一info - 将
data转为十进制数值,让0x7和0x00000007被判定为相同值 - 先统计后筛选的逻辑,确保只保留
info对应多种不同data值的行
内容的提问来源于stack exchange,提问作者V_S
相关产品推荐
相关产品推荐

