我已經寫了一個腳本,它讀取不同的文件並在大型sdf數據庫中搜索分子ID(每個大約4.0 GB)。解析sdf文件,性能問題
這個腳本的想法是從我的原始數據庫中將每個分子從一個id列表(大約287212個分子)複製到一個新的分子,每個分子只有一個單一拷貝(在這種情況下,第一個副本遇到)
我writen這個腳本:
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()
它的工作原理perfectely,但它是非常緩慢的...我需要什麼太慢。有沒有辦法以一種可以減少計算時間的方式來重寫此腳本?
非常感謝。
是的,這是我正在測試的解決方案,它似乎更快... –