【发布时间】: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