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

如何用Python从多文本文件提取BAR dG数值构建向量

Python实现提取数值并计算平均值方案

核心思路

  • 批量遍历所有目标文本文件
  • 用正则表达式匹配目标行,稳定提取dG数值(不受中间空格数量变化影响)
  • 收集数值到列表后直接计算平均值

完整实现代码

import re

# 替换为你实际的10个文件路径
file_list = [
    "./data/file1.out",
    "./data/file2.out",
    "./data/file3.out",
    "./data/file4.out",
    "./data/file5.out",
    "./data/file6.out",
    "./data/file7.out",
    "./data/file8.out",
    "./data/file9.out",
    "./data/file10.out"
]

yi = []
# 正则匹配规则:兼容任意数量的空格、正负数值、带/不带小数点的情况
match_pattern = r"BAR: dG =\s*([-+]?\d+\.?\d*)\s+kcal/mol"

for file_path in file_list:
    with open(file_path, 'r', encoding='utf-8') as f:
        # 逐行扫描文件
        for line in f:
            res = re.search(match_pattern, line)
            if res:
                # 提取数值,需要字符串格式就删掉外层的float()
                dg_val = float(res.group(1))
                yi.append(dg_val)
                # 找到目标行后直接终止当前文件的扫描,提升效率
                break

# 输出结果与校验
if len(yi) == 10:
    avg_dg = sum(yi)/len(yi)
    print(f"提取得到的yi列表:{yi}")
    print(f"10个数值的平均值为:{avg_dg:.2f} kcal/mol")
else:
    print(f"提取异常:仅拿到{len(yi)}个有效数值,请检查对应文件是否存在目标行")

可选简化方案(格式完全固定时使用)

如果你确定所有文件里的目标行BAR: dG =后面的空格数量完全一致,也可以不用正则,直接用字符串分割提取:

# 把上述代码里的匹配逻辑替换为以下内容
for file_path in file_list:
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            if line.startswith("BAR: dG =   "):
                # 按固定前缀分割,再取第一个空格前的内容就是数值
                dg_val = line.split("BAR: dG =   ")[1].split()[0]
                yi.append(float(dg_val))
                break

内容的提问来源于stack exchange,提问作者Thales Souza Freire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:54:01