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

如何在Python中解析文件提取特定变量并按分类存入列表?

按区块提取变量与name_type的解决方案

嘿,我看你想从file_1.py里按#TypeA和#TypeB的区块分类,提取变量名(比如var_1)和对应的name_type值(比如typeA_1)。你的现有代码没充分利用写好的区块提取逻辑,而且解析行的方式不够健壮,导致效果不佳。我帮你调整了代码,完美实现需求:

def get_section_lines(my_file, begin_marker):
    """从文件中提取从指定#Type标记开始,到下一个Type标记或文件结束的有效行"""
    with open(my_file) as f:
        in_target_section = False
        for line in f:
            stripped_line = line.strip()
            # 触发进入目标区块
            if stripped_line.startswith(begin_marker):
                in_target_section = True
                continue
            # 遇到下一个Type标记就退出当前区块
            if in_target_section and stripped_line.startswith('#Type'):
                break
            # 只处理区块内的非注释、非空的变量定义行
            if in_target_section and '=' in stripped_line and not stripped_line.startswith('#'):
                yield line.rstrip()

def parse_variable_line(line):
    """解析单条变量行,返回(变量名, name_type值)的元组,解析失败返回None"""
    # 分割变量名和右侧赋值内容(只分割第一个=,避免内容里的=干扰)
    var_part, value_part = line.split('=', 1)
    var_name = var_part.strip()
    # 用正则匹配name_type的值,兼容空格或无空格的写法
    import re
    match = re.search(r'name_type\s*=\s*(\w+)', value_part)
    if match:
        return (var_name, match.group(1))
    return None

def main():
    # 分别提取TypeA和TypeB区块的变量
    type_a_vars = []
    for line in get_section_lines('file_1.py', '#TypeA'):
        parsed = parse_variable_line(line)
        if parsed:
            type_a_vars.append(parsed)
    
    type_b_vars = []
    for line in get_section_lines('file_1.py', '#TypeB'):
        parsed = parse_variable_line(line)
        if parsed:
            type_b_vars.append(parsed)
    
    # 打印分类后的结果,方便查看
    print("=== TypeA 区块 ===")
    for var, nt_val in type_a_vars:
        print(f"{var} → {nt_val}")
    
    print("\n=== TypeB 区块 ===")
    for var, nt_val in type_b_vars:
        print(f"{var} → {nt_val}")

if __name__ == "__main__":
    main()

为什么这个版本更靠谱?

  • 精准的区块定位:get_section_lines函数会自动定位到你指定的#TypeX区块,遇到下一个Type标记就停止,不会把不同区块的内容混在一起
  • 健壮的行解析:用正则匹配name_type的值,不管是name_type=typeA_1还是name_type = typeA_1都能正确识别;而且只分割第一个=,避免变量值里的=搞乱解析
  • 自动过滤无效行:跳过空行、注释行,只处理有效的变量定义行,不会把无关内容塞进去

测试效果

假设你的file_1.py内容是你给出的示例,运行脚本后会输出:

=== TypeA 区块 ===
var_1 → typeA_1
var_2 → typeA_2

=== TypeB 区块 ===
var_3 → typeB_1
var_4 → typeB_2

这样你就能得到分类好的变量和对应的name_type,不管是后续对比还是其他使用都很方便啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:02:47