我已经编写了一个脚本,它可以读取不同的文件并在大型 sdf 数据库(每个大约 4.0 GB)中搜索分子 ID。
这个脚本的想法是将每个分子从我的原始数据库中的 id 列表(大约 287212 个分子)复制到一个新数据库中,以使每个分子只有一个副本(在这种情况下,遇到的第一个副本)
我写了这个脚本:
import re
import sys
import os
def sdf_grep (molname,files):
filin = open(files, 'r')
filine= filin.readlines()
for i in range(0,len(filine)):
if filine[i][0:-1] == molname and filine[i][0:-1] not in past_mol:
past_mol.append(filine[i][0:-1])
iterate = 1
while iterate == 1:
if filine[i] == "$$$$\n":
filout.write(filine[i])
iterate = 0
break
else:
filout.write(filine[i])
i = i+1
else:
continue
filin.close()
mol_dock = os.listdir("test")
listmol = []
past_mol = []
imp_listmol = open("consensus_sorted_surflex.txt", 'r')
filout = open('test_ini.sdf','wa')
for line in imp_listmol:
listmol.append(line.split('\t')[0])
print 'list ready... reading files'
imp_listmol.close()
for f in mol_dock:
print 'reading '+f
for molecule in listmol:
if molecule not in past_mol:
sdf_grep(molecule , 'test/'+f)
print len(past_mol)
filout.close()
它工作得很好,但它很慢......对于我需要的东西来说太慢了。有没有办法以可以减少计算时间的方式重写这个脚本?
非常感谢你。