You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在bytesize为8时给文件中的字符串名称添加LOW/HIGH后缀

解决字段拆分与名称后缀添加的Python代码修改方案

需求说明

现有input.txt文件,每行包含name、number、bytesize、info四个字段,需生成output.txt文件,规则如下:

  • 当bytesize="8"时,将info拆分为低32位和高32位两部分,对应name分别添加_LOW和_HIGH后缀,同时第二行的number需递增0x32
  • 当bytesize不为8时,保持原字段输出

输入文件内容

name="XYZ_PP_0" number="0x12" bytesize="4" info="0x00000012"
name="GK_LMP_2_0" number="0xA5" bytesize="8" info="0x00000000bbae321f"
name="MP_LKO_1_0" number="0x356" bytesize="4" info="0x00000234"
name="PNP_VXU_1_2_0" number="0x48A" bytesize="8" info="0x00000000a18c3ba3"
name="AVU_W_2_3_1" number="0x867" bytesize="1" info="0x0b"

现有问题代码

import re                                                     

infile_path = "./input.txt"
outfile_path = "./output.txt"

with open(infile_path, "r") as infile, open(outfile_path, "w") as outfile:
    for s in infile:
        r = re.match('number="(.*)" bytesize="(.*)" info="(.*)"', s)
        if r:
            num, bs, info = map(lambda x: int(x, 0), r.groups())
            l = len(r.group(3)) - 2
            if bs == 8:
                l = 8
                nums = (num, num + 0x32)
                infos = (info % (2**32), info // (2**32))
            else:
                nums = (num, )
                infos = (info, )
            for num, info in zip(nums, infos):
                outfile.write(f'number="{num:#x}" info="{info:#0{l+2}x}"\n')

预期输出

name="XYZ_PP_0" number="0x12" info="0x00000012"
name="GK_LMP_2_0_LOW" number="0xA5" info="0xbbae321f"
name="GK_LMP_2_0_HIGH" number="0xD7" info="0x00000000"
name="MP_LKO_1_0" number="0x356" info="0x00000234"
name="PNP_VXU_1_2_0_LOW" number="0x48A" info="0xa18c3ba3"
name="PNP_VXU_1_2_0_HIGH" number="0x4BC" info="0x00000000"
name="AVU_W_2_3_1" number="0x867" info="0x0b"

修改后的完整代码

import re                                                     

infile_path = "./input.txt"
outfile_path = "./output.txt"

# 调整正则表达式,捕获完整的四个字段
pattern = re.compile(r'name="(.*?)" number="(.*?)" bytesize="(.*?)" info="(.*?)"')

with open(infile_path, "r") as infile, open(outfile_path, "w") as outfile:
    for line in infile:
        line = line.strip()
        if not line:
            continue
        match = pattern.match(line)
        if match:
            name, num_str, bs_str, info_str = match.groups()
            num = int(num_str, 0)
            bs = int(bs_str, 0)
            info = int(info_str, 0)
            
            if bs == 8:
                # 拆分info为低32位和高32位
                low_info = info & 0xFFFFFFFF
                high_info = info >> 32
                # 准备后缀、编号和对应info数据
                name_suffixes = ["_LOW", "_HIGH"]
                nums = [num, num + 0x32]
                infos = [low_info, high_info]
                # 循环生成两行输出
                for suffix, current_num, current_info in zip(name_suffixes, nums, infos):
                    formatted_info = f"0x{current_info:08x}"
                    outfile.write(f'name="{name}{suffix}" number="{current_num:#x}" info="{formatted_info}"\n')
            else:
                # 非8字节场景,直接保留原格式输出
                outfile.write(f'name="{name}" number="{num:#x}" info="{info_str}"\n')

关键修改点

  • 正则表达式优化:新增name字段的捕获逻辑,确保能提取每行完整的四个字段信息
  • 名称后缀处理:针对bytesize=8的行,为原名称添加_LOW和_HIGH后缀,对应拆分后的info数据
  • info格式修正:拆分后的info统一格式化为8位十六进制字符串,匹配预期输出样式
  • 字段顺序保留:输出时保持name、number、info的顺序,与输入格式一致
  • 空行过滤:跳过输入中的空行,避免无效输出内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:25:30