phenylazide 发表于 2017-5-9 17:34:17

python脚本获取vina虚选log文件score数值。

本帖最后由 phenylazide 于 2017-5-14 21:37 编辑

上午我看了作者“数据挖掘“ 写的原创 文章:[原创] vina 虚拟筛选log文件的分析的脚本,他用的是perl写的脚本
但是我自己运行了下他的代码,一直出现错误,从来没有成功过,另外尝试了下想看懂perl,但感觉比较难,难以下手去改。后来发现有两种方便的方法可以调出结果。
第一种: 在linux下面使用强大的grep命令。
---------------------------
~$ grep "   1         -" */*log.txt每个ligand的第一个pose结果就全出来了:
例如我得到结果如下:
result_3K5K/A366_3K5Klog.txt:   1         -7.6      0.000      0.000
result_3K5K/asc_17_3K5Klog.txt:   1         -7.7      0.000      0.000
result_3K5K/asc_21_3K5Klog.txt:   1         -7.4      0.000      0.000
result_3K5K/BIX01294_3K5Klog.txt:   1         -7.8      0.000      0.000
result_3K5K/UNC0224_ChemDraw_3K5Klog.txt:   1         -7.4      0.000      0.000
result_3K5K/UNC0638_3K5Klog.txt:   1         -7.4      0.000      0.000
。。。
。。。
此处略去无数行

如果增加tee命令:


~$ grep "   1         -" */*log.txt | tee -a result_first_pose.txt
则所有上述显示的结果会全部写 result_first_pose.txt

如果在将新建excel,选择数据>自文本
再选择刚才的文本文件 result_first_pose.txt > 分隔符号 > 空格 > 下一步 >完成

结果就全写了excel表格了。呵呵。

result_3K5K/A366_3K5Klog.txt:1-7.600
result_3K5K/asc_17_3K5Klog.txt:1-7.700
result_3K5K/asc_21_3K5Klog.txt:1-7.400
result_3K5K/BIX01294_3K5Klog.txt:1-7.800
result_3K5K/UNC0224_ChemDraw_3K5Klog.txt:1-7.400
result_3K5K/UNC0638_3K5Klog.txt:1-7.400
。。。
此处略去无数行


#说明:grep "   1         -"中的引号内容 克根据需要 采用正则表达式
--------------------------------------------------------------

第二种:使用以下python代码的方式。

调出所有化合物中最优pose的能量,自己瞎尝试,编了个Python的脚本。代码也较简单,但效果也不错,速度也不慢。5000个log文件在一分钟内也都搞定了。

代码很简单,如下:
---------------------------------------------------------------
import sys,os
import glob


os.chdir("D:\\vina_log_fetch\\result_all_log")#进入log文件所在的目录
for file in glob.glob("*.txt"):
      try:
                f = open(file,'r+')
                lines = f.readlines()   ##读取第25,26行的内容,log文件一般总共34行,但所要的一般在第25行,所以f.readlines()
               ##但有些log文件 print 结果是-----+------------+----------+----------所有用了个if语句,取下一行。
                if lines.startswith('-----+'):
                        print(file, "   ,",lines)
                else:
                        print(file, "   ,", lines)
      except:


                print(file,"   ,", "read failure")
                pass
"""
用法和注意事项:


1. 请在第四行(即os.chdir那行的括号里面),修改vina log文件的存储的位置,注意使用双反斜杠 \\,不然会出错。我使用的是windows系统,批量log文件在windows的实际位置是:D:\vina_log_fetch\logFiles。 vina_fetch_top_score.py存放在D:\vina_log_fetch目录下。


2. 在cmd下,cd进入D:\vina_log_fetch目录(即vina_fetch_top_score.py所在的目录),敲击以下命令:
python vina_fetch_top_score.py > vina_top_score_list.txt
所有的top1的score和文件即可获得,结果存在vina_top_score_list.txt。
同样采用上述excel,数据>自文本的方式,可以获得excel表格
"""
-------------------------------------------------以下是python文件,使用时请产出.doc后缀。











phenylazide 发表于 2017-5-9 17:38:00

本帖最后由 phenylazide 于 2017-5-9 17:43 编辑

以下是py文件,使用时把.doc后缀去掉

Cao921210 发表于 2020-3-13 22:39:55

我做出的结果为什么会空一行?谢谢啦
页: [1]
查看完整版本: python脚本获取vina虚选log文件score数值。