从一些大型数据库上下载下来的小分子数据库,动辄上百万、上千万的分子,如果没有服务器,只是普通电脑,要想进行分子筛选,可选的方法就是分割这个小分子数据库,然后依次进行筛选,本人结合已有经验和个人情况总结了一些代码,供大家参考:

f= "D://zinc_400//ligands//ligand46//concat_46"

split_number= 35000    # number of molecules in each file

number_of_sdfs = split_number

i=0

j=0

f2=open(f+'_'+str(j)+'.sdf','w')

for line in open(f+'.sdf'):

    f2.write(line)

    if line[:4] == "$$$$":   #判断 line变量的前四个字符是$$$$

        i+=1

        if i > number_of_sdfs:

            number_of_sdfs += split_number 

            # i是个计数器打开文件后记录50000次,打开下一个文件;这行就是保证计数器正常工作。

            # 不用这行,会生成f_0、f1-f_i个文件

            f2.close()

            j+=1

            f2=open(f+'_'+str(j)+'.sdf','w')

print(i)

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐