如何修改这个脚本来search多个关键字?

我正在尝试修改脚本。 这对我来说很难,所以我来求助。 这个脚本应该从一些.out文件中提取数据,然后将它们写入一个.txt文件中。 问题是我有两个不同的关键字来寻找。 所以,我提供了脚本,我无法修改的东西,然后提供了两个input文件的例子。

 #!/usr/bin/env python # -*- coding: utf-8 #~ Data analysis import glob, subprocess, shutil, os, math from funciones import * for namefile in glob.glob("*.mol2"): lstmol2 = [] lstG=[] os.chdir("some_directory") searchprocess="grep -i -H 'CURRENT VALUE OF HEAT OF FORMATION =' *.out | sort -k 4 > firstfile.txt" #~I need also to look for 'CURRENT BEST VALUE OF HEAT OF FORMATION =' os.system(searchprocess) fileout=open("results.txt","w") filein=open("firstfile.txt", "r") #~ write data in results.txt fileout.write('\t %s \n' %(" HOF")) for line in filein: linediv=line.split() HOF=float(linediv[8]) #~or [10] (for the keyword in need to add) but in both cases I need the float. I need both data of the keywords be included on this file. lstG.append(HOF) fileout.close() filein.close() 

input数据,types1:

 foofoofooofoofoofoofoofoo foofoofooofoofoofoofoofoov foofoofooofoofoofoofoofoo CURRENT VALUE OF HEAT OF FORMATION = 1928 foofoofooofoofoofoofoofoo foofoofooofoofoofoofoofoov 

input数据,types2:

 foofoofooofoofoofoofoofoo foofoofooofoofoofoofoofoov foofoofooofoofoofoofoofoo CURRENT BEST VALUE OF HEAT OF FORMATION = 1930 foofoofooofoofoofoofoofoo foofoofooofoofoofoofoofoov 

你应该更新你的grep命令来查找可选单词? 运营商。 使用-E标志来启用伸展正则表达式,所以你不必逃避你的正则表达式运算符。 总是在你的模式中使用单引号:

 searchprocess="grep -E -i -H 'CURRENT( BEST)? VALUE OF HEAT OF FORMATION =' *.out | sort -k 4 > firstfile.txt" 

@PrestonHager是正确的,你应该改变linediv[8] linediv[-1] ,因为在BEST的情况下,数字将在linediv[9]位置,但在这两种情况下linediv[-1]将给你想要的结果。