从无序TXT文件提取同类建筑模拟条目并整理为结构化列表
建筑模拟TXT条目分类解决方案
针对无序TXT文件中SimulationControl、Building、SizingPeriod:DesignDay三类条目的分类需求,之前的起止字符串方法失效,核心原因是这类建筑模拟条目(如EnergyPlus输入文件)常跨多行、条目顺序混乱,单纯的行起止匹配无法准确识别完整条目块。以下是可行的块识别分类方案:
核心思路
这类条目块有明确的特征:
- 每个条目以指定类型名开头
- 条目块以分号
;作为结束标记(支持跨多行) - 需跳过空行和注释行(通常以
!开头)
基于完整条目块的识别,再匹配类型分类,就能解决无序、跨行的问题。
实现示例(Python)
# 初始化三个目标列表 simulation = [] building = [] sizingperiod = [] # 建立类型与目标列表的映射,方便扩展 type_mapping = { "SimulationControl": simulation, "Building": building, "SizingPeriod:DesignDay": sizingperiod } # 读取目标TXT文件 with open("building_simulation.txt", "r", encoding="utf-8") as f: raw_lines = f.readlines() current_entry_block = [] for line in raw_lines: cleaned_line = line.strip() # 跳过空行和注释行 if not cleaned_line or cleaned_line.startswith("!"): continue current_entry_block.append(line.rstrip("\n")) # 识别条目块结束标记 if ";" in cleaned_line: # 提取条目的类型名(取块首行第一个空格前的内容) first_line = current_entry_block[0].strip() entry_type = first_line.split()[0] # 匹配类型并加入对应列表 if entry_type in type_mapping: type_mapping[entry_type].append("\n".join(current_entry_block)) # 重置当前块,准备下一个条目 current_entry_block = [] # 验证输出示例 print("=== SimulationControl 条目 ===") for item in simulation: print(item) print("---")
关键细节说明
- 块拆分逻辑:逐行收集内容,直到遇到包含
;的行,判定为一个完整条目块,避免跨行条目被拆分。 - 类型匹配:通过块首行的第一个字符串确定条目类型,不受后续行内容干扰。
- 容错处理:自动跳过空行和注释行,避免无效内容影响分类结果。
内容的提问来源于stack exchange,提问作者jose paulo Oliveira
相关产品推荐
相关产品推荐

