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

适配任意分子的TXT输出文件NAC耦合数据多行列解析方案求助

通用NAC输出文件解析实现方案

问题修复核心思路

  • 针对数据覆盖问题:取消单变量存储匹配结果的逻辑,初始化列表存储所有匹配行的解析结果,每次命中匹配规则就追加数据到列表中
  • 针对分子适配问题:新增原子元数据预解析逻辑,优先读取文件头部的原子总数、原子序号与对应类型信息存储为公共属性,解析耦合值时直接调用预存的元数据,无需硬编码特定分子的参数

示例实现代码

class NACParser(ParseSection):
    name = "coupling"
    def __init__(self):
        # 初始化存储容器避免数据覆盖
        self.all_coupling_data = []
        # 存储预解析的原子元数据:结构为 {原子序号: 原子类型, ...}
        self.atom_meta = {}
        self.total_atoms = 0

    def pre_parse_atom_info(self, file_content):
        """预解析文件中的原子信息段,适配任意分子结构"""
        # 此处可替换为对应输出文件的原子信息行匹配规则,适配不同量化软件的输出格式
        atom_lines = [line for line in file_content.splitlines() if "Atom" in line or "atomic number" in line]
        self.total_atoms = len(atom_lines)
        for idx, line in enumerate(atom_lines, 1):
            # 按实际文件格式调整原子类型提取逻辑即可
            atom_type = line.strip().split()[-1]
            self.atom_meta[idx] = atom_type

    def parse(self, file_content):
        # 先预解析原子元数据
        self.pre_parse_atom_info(file_content)
        # 匹配所有耦合值行,正则适配示例给出的(y,mz) = (xxx,xxx,xxx)格式
        import re
        pattern = re.compile(r'y,mz\) = \((-?\d+\.?\d*D[+-]?\d+),(-?\d+\.?\d*D[+-]?\d+),(-?\d+\.?\d*D[+-]?\d+)\)')
        for line in file_content.splitlines():
            match = pattern.search(line)
            if match:
                # 将Fortran风格科学计数法D转为Python可识别的e
                vals = [float(x.replace('D', 'e')) for x in match.groups()]
                # 追加数据到列表,不会覆盖之前的解析结果
                self.all_coupling_data.append(vals)
        # 返回全量解析结果
        return {
            "total_atoms": self.total_atoms,
            "atom_info": self.atom_meta,
            "coupling_values": self.all_coupling_data
        }

适配调整说明

  • 正则匹配规则可根据实际输出文件的行格式调整,当前已适配你给出的y,mz) = (-.504D-04,-.543D-04,-.538D-03)格式
  • 仅需修改pre_parse_atom_info方法内的行匹配和字段提取逻辑,即可适配不同量化软件的原子信息输出格式,核心解析逻辑无需改动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:39:03