さまざまなファイルを読み取り、大きな sdf データベース (それぞれ約 4.0 GB) で分子 ID を検索するスクリプトを作成しました。
このスクリプトのアイデアは、id のリスト (約 287212 分子) からすべての分子を元のデータベースから新しいデータベースにコピーして、各分子のコピーを 1 つだけ持つようにすることです (この場合、最初に検出されたコピー)。
私はこのスクリプトを書きました:
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()
それは完全に機能しますが、非常に遅いです...必要なものには遅すぎます。計算時間を短縮できる方法でこのスクリプトを書き直す方法はありますか?
どうもありがとうございます。