如何在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
相关产品推荐
相关产品推荐

