【问题标题】:Can RDkit batch convert SMILES in a csv to individual images?RDkit 可以将 csv 中的 SMILES 批量转换为单个图像吗?
【发布时间】:2021-05-13 02:04:29
【问题描述】:

我有一个 csv 文件中的 SMILES 列表(其中大约 900 个),我想将其转换为单个图像 (200 x 200)。我知道我可以运行这个:

from rdkit import Chem
from rdkit.Chem import Draw
import matplotlib.pyplot as plt
%matplotlib inline

smiles = 'C1CC[13CH2]CC1C1CCCCC1'
mol = Chem.MolFromSmiles(smiles)
Draw.MolToMPL(mol, size=(200, 200))

一次只取出一张图片,但我所有将其放入 for 循环(使用列表或读取 csv)的尝试都失败了。

我的 for 循环看起来像:

from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem import Descriptors
from rdkit.Chem import AllChem
import PIL
from PIL import Image

smiles_list = ['ClCC(=O)N1CCc2ccc(cc12)N(=O)=O', 
'ClCC(=O)N1CCc2ccc(cc12)N(=O)=O', 'ClCC(=O)Nc1nc(cs1)-c1ccco1']

mol_list = []
for smiles in smiles_list:
    mol = Chem.MolFromSmiles(smiles)
    mol_list.append(mol)

Draw.MolToMPL(mol_list)

这一直给我错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-3-83978cee41c7> in <module>
     15     mol_list.append(mol)
     16 
---> 17 Draw.MolToMPL(mol_list)

~\Anaconda3\envs\my-rdkit-env\lib\site-packages\rdkit\Chem\Draw\__init__.py in MolToMPL(mol, size, kekulize, wedgeBonds, imageType, fitImage, options, **kwargs)
    346   if kekulize:
    347     from rdkit import Chem
--> 348     mol = Chem.Mol(mol.ToBinary())
    349     Chem.Kekulize(mol)
    350 

AttributeError: 'list' object has no attribute 'ToBinary'

有人知道任何 rdkit 技巧吗?

【问题讨论】:

  • "我所有将其放入 for 循环或列表的尝试都失败了" - 如果您的代码无法正常工作,请展示它...并解释如何失败了。
  • 谢谢。我已经用我想出的一些代码和我得到的错误编辑了我的问题。
  • MolToMPL 期望的是单个分子,而不是分子列表,那么为什么不创建另一个列表并将图像附加到 for 循环中呢?
  • 为什么不在for循环中添加Draw.MolToMPL(mol)Draw.MolToMPL 不支持列表,它需要单个 mol 对象。

标签: rdkit


【解决方案1】:

感谢 Oliver Scott 和 Quat 的 cmets。可以得到我现在需要的东西!对于任何有兴趣的人:

smiles_list = ['ClCC(=O)N1CCc2ccc(cc12)N(=O)=O', 'ClCC(=O)N1CCc2ccc(cc12)N(=O)=O', 
'ClCC(=O)Nc1nc(cs1)-c1ccco1']

mol_list = []
for smiles in smiles_list:
    mol = Chem.MolFromSmiles(smiles)
    mol_list.append(mol)
    Draw.MolToMPL(mol, size=(200, 200)) 

或者简单地将smiles_list 替换为csv 读入:

smiles_list = pd.read_csv('test.csv')

mol_list = []
for smiles in smiles_list:
    for smiles in smiles_list['Smiles']:    # assuming your column is called Smiles
        mol = Chem.MolFromSmiles(smiles)
        mol_list.append(mol)
        Draw.MolToMPL(mol, size=(200, 200))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2012-06-03
    • 2017-01-09
    • 2011-05-05
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    相关资源
    最近更新 更多