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

如何用Python从数千个Vina对接日志文件提取最低结合能并导出TXT

可行的Python实现方案

核心逻辑

  • 批量遍历指定目录下的日志文件
  • 从每个文件中提取第一个出现的负浮点数结合能(对应Top10里的最低值)
  • 将文件名(药物ID)和提取到的能量值写入output.txt,两列用制表符分隔

实现代码

import os
import re

# 替换为你的日志文件所在目录
LOG_FOLDER = "./vina_logs"
# 输出结果文件名
RESULT_FILE = "output.txt"

# 正则匹配结合能:适配Vina日志里类似 "-3.7 kcal/mol" 或表格行里的数值
# 如果你的日志是表格格式(比如"  1   -3.7   0.000   0.000"),用下面的正则替换掉当前的
# ENERGY_REGEX = re.compile(r'^\s*\d+\s+(\-?\d+\.\d+)', re.MULTILINE)
ENERGY_REGEX = re.compile(r'^(\-?\d+\.\d+) kcal/mol', re.MULTILINE)

# 写入结果文件
with open(RESULT_FILE, 'w', encoding='utf-8') as result_f:
    # 遍历目录下所有文件
    for file_name in os.listdir(LOG_FOLDER):
        # 只处理日志文件,后缀可根据实际调整
        if file_name.endswith(".log"):
            full_path = os.path.join(LOG_FOLDER, file_name)
            try:
                with open(full_path, 'r', encoding='utf-8') as log_f:
                    log_content = log_f.read()
                    # 查找第一个匹配的结合能
                    match_result = ENERGY_REGEX.search(log_content)
                    if match_result:
                        lowest_energy = match_result.group(1)
                        result_f.write(f"{file_name}\t{lowest_energy}\n")
                    else:
                        # 标记未找到的情况
                        result_f.write(f"{file_name}\t未提取到结合能\n")
            except Exception as err:
                # 处理文件读取异常
                result_f.write(f"{file_name}\t读取失败: {str(err)}\n")

print(f"处理完成,结果已保存到 {RESULT_FILE}")

关键说明

  1. 路径配置:把LOG_FOLDER改成你存放日志文件的实际路径,比如"D:/vina_results/logs"
  2. 正则适配:
    • 如果日志里结合能是单独一行的-3.7 kcal/mol,用默认的正则
    • 如果是表格形式(Vina默认输出的Top10结果),注释掉默认正则,启用表格版的正则
  3. 异常处理:脚本会自动跳过读取出错的文件,并在结果里标记,不会因为单个文件问题中断批量处理
  4. 输出格式:用制表符分隔两列,直接用Excel打开就能自动分成两列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:15:49