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

