如何按lognorm或exp_E参数对每12行为一组的多项式数据进行排序
实现方案
你可以按以下逻辑完成分组排序,Python实现的话处理50万行数据效率完全满足要求:
核心步骤
- 先把整个数据集按空行切分,每一块内容对应一个12行的分组,比按固定12行计数的容错性更高,避免部分行异常导致分组错位
- 对每个分组提取最后一行的目标参数(lognorm/exp_E),用正则匹配就能快速拿到对应浮点值
- 多项式检索场景下通常参数值越小多项式质量越高,所以按提取的数值做升序排序即可,需要逆序的话调整排序规则就行
- 排序完成后按原始格式拼接所有分组输出,保留原数据的所有字段
示例代码
import re # 可自定义排序依据:选"lognorm" 或 "exp_E" SORT_KEY = "lognorm" def extract_sort_value(group_content: str) -> float: # 匹配最后一行的目标参数值 match = re.search(rf"{SORT_KEY} (\d+\.?\d*)", group_content) if not match: # 异常分组可以放最后或者过滤,这里默认给极大值放末尾 return float("inf") return float(match.group(1)) if __name__ == "__main__": # 读取原始数据 with open("你的数据集路径.txt", "r", encoding="utf-8") as f: content = f.read() # 按空行拆分成分组,过滤掉空块 groups = [g.strip() for g in content.split("\n\n") if g.strip()] # 按指定参数升序排序 groups_sorted = sorted(groups, key=extract_sort_value) # 输出排序后的结果 with open("排序后结果.txt", "w", encoding="utf-8") as f: f.write("\n\n".join(groups_sorted))
注意事项
- 如果你的数据集严格遵循每12行一个分组的规则,也可以直接按行号批量截取分组:
[content_lines[i:i+12] for i in range(0, len(content_lines), 12)],和空行拆分的效果一致 - 排序前可以先做参数校验,把匹配不到数值的异常分组单独拎出来处理,避免影响整体排序结果
内容的提问来源于stack exchange,提问作者Plutie
相关产品推荐
相关产品推荐

