You need to enable JavaScript to run this app. 同HEADER格式多数据集拼接:提取指定块合并并更新TAIL计数
优惠活动
大模型
产品
解决方案
定价
更多

同HEADER格式多数据集拼接:提取指定块合并并更新TAIL计数

同编号多HEADER数据块拼接实现方案

核心处理规则

完全匹配业务需求的处理逻辑:

  • 按块拆分原文件内容:每块以HEAD 编号 后缀为起始标识,以同编号的TAIL 编号 记录数为结束标识,中间的所有非HEAD/TAIL行即为块主体记录。
  • 按块编号做分组归集:
    • 仅出现1次的编号块:完全保留原有内容,不做修改,按原文件中的出现顺序排在输出结果前段。
    • 出现多次的编号块:
      1. 仅保留1次该编号对应的HEAD行,删除其余重复的同编号HEAD行
      2. 按原出现顺序拼接所有同编号块的主体记录,不做记录去重
      3. 统计拼接后主体记录的总条数,将TAIL行的末尾数字替换为两位补零的总条数,仅保留1次更新后的TAIL行,删除其余重复的同编号TAIL行
  • 输出排序:所有单块内容按原顺序前置,最后追加合并完成的多块内容,与示例输出顺序完全一致。

可直接落地的参考实现

运行下方Python代码即可完成上述处理,处理示例输入后输出结果和给定预期完全匹配:

def merge_same_id_blocks(file_path):
    multi_block_cache = {}
    current_reading_block = {"id": "", "head_line": "", "body_lines": []}

    with open(file_path, 'r', encoding='utf-8') as f:
        all_lines = [line.rstrip('\n') for line in f if line.strip()]

    for line in all_lines:
        if line.startswith("HEAD"):
            # 完成上一个块的归集
            if current_reading_block["id"]:
                block_id = current_reading_block["id"]
                if block_id not in multi_block_cache:
                    multi_block_cache[block_id] = {
                        "head": current_reading_block["head_line"],
                        "body": current_reading_block["body_lines"],
                        "is_single": True
                    }
                else:
                    multi_block_cache[block_id]["is_single"] = False
                    multi_block_cache[block_id]["body"].extend(current_reading_block["body_lines"])
            # 初始化新块读取状态
            line_parts = line.split()
            current_reading_block = {
                "id": line_parts[1],
                "head_line": line,
                "body_lines": []
            }
        elif line.startswith("TAIL"):
            # 完成当前块的归集
            block_id = current_reading_block["id"]
            if block_id not in multi_block_cache:
                multi_block_cache[block_id] = {
                    "head": current_reading_block["head_line"],
                    "body": current_reading_block["body_lines"],
                    "is_single": True
                }
            else:
                multi_block_cache[block_id]["is_single"] = False
                multi_block_cache[block_id]["body"].extend(current_reading_block["body_lines"])
            # 重置块读取状态
            current_reading_block = {"id": "", "head_line": "", "body_lines": []}
        else:
            # 普通主体行追加到当前块
            current_reading_block["body_lines"].append(line)

    # 组装最终输出
    output = []
    # 先输出所有单块
    for block_id, block_content in multi_block_cache.items():
        if block_content["is_single"]:
            output.append(block_content["head"])
            output.extend(block_content["body"])
            output.append(f"TAIL {block_id} {len(block_content['body']):02d}")
    # 再输出所有合并后的多块
    for block_id, block_content in multi_block_cache.items():
        if not block_content["is_single"]:
            output.append(block_content["head"])
            output.extend(block_content["body"])
            output.append(f"TAIL {block_id} {len(block_content['body']):02d}")

    return "\n".join(output)

效果校验

针对题中的示例输入,代码会自动计算0001编号块的主体总条数:第一块3条记录、第二块5条记录,合并后共8条,最终生成的TAIL行为TAIL 0001 08,整体输出顺序和格式与给定预期完全一致。

内容的提问来源于stack exchange,提问作者John Bailey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.14 23:36:03