import pybel
import openbabel
import os
import threading
#只引入了p()函数
from common.functions import \*
#封装了mysql的数据库
from db.MySQL import MySQL
#封装了mongodb的数据库
# from db.Mongo import Mongo
def smilesToIMG(smiles,filename):
    filename1 = filename+".png"
    filename2 = filename+".svg"
    smiles = smiles.replace('\\n','')
    try:
        mol = pybel.readstring("smi", smiles)
    except Exception as e:
        return 'error'
    try:
        mol.draw(show=False, filename=filename1, update=True)
        mol.make3D()
    except Exception as e:
        return 'error'
    mol = pybel.readstring("smi", smiles)
    mol.write("svg", filename2, overwrite=True)
    return 'ok'
def work(L1):
    for v in L1:
        ident = threading.currentThread().ident
        p(ident)
        status = smilesToIMG(v\['smiles'\],v\['filename'\])
        p(status)
def main():
    MySQLConn = MySQL(host='xxx', port=3306, user='root', passwd='xxx', db='xxx')
    datas = MySQLConn.fetchall("select id,smiles from xxx where smiles != '' and structure\_img = ''")
    D2 = \[\]
    p(datas)
    # quit()
    j=0
    for data in datas:
        path = "./upload/" + str(data\['id'\] % 1000)
        if os.path.exists(path):
            p('pass1')
            pass
        else:
            os.makedirs(path)
        filename1 = path+'/' + str(data\['id'\]) + '.png'
        filename = path+'/' + str(data\['id'\])
        if os.path.exists(filename1):
            p('num:'+str(j))
            j+=1
            pass
        else:
            p('file1')
            if data\['smiles'\]:
                D1={'filename':filename,'smiles':data\['smiles'\]}
                D2.append(D1)
    xc = 20
    one = len(D2)//xc
    for i in range(xc + 1):
        L1 = D2\[i \* one:(i + 1) \* one\]
        t = threading.Thread(target=work, args=(L1,))
        t.start()
if \_\_name\_\_ == '\_\_main\_\_':
    main()
    print('ok')
本文为wjw原创文章,转载无需和我联系,但请注明来自wjw博客http://wjiawen.cn
 
                
最新评论