# coding=utf-8 from rdkit import Chem import pandas as pd # 读取CSV文件 data = pd.read_csv('dataSetA.csv') # 提取SMILES列 smiles = data['rxn_Smiles'] # 遍历每个SMILES字符串并打印结构式 for smi in smiles: mol = Chem.MolFromSmiles(smi) if mol is not None: Chem.Draw.MolToMPL(mol) # 在Matplotlib中绘制结构式
时间: 2024-04-18 11:23:19 浏览: 167
这段代码使用了RDKit库来处理化学数据,并绘制了结构式。
首先,代码导入了所需的模块和库。`rdkit`是一个用于化学信息学的Python库,`pandas`用于处理数据。
然后,代码通过`pd.read_csv('dataSetA.csv')`读取了名为`dataSetA.csv`的CSV文件,并将其存储在名为`data`的DataFrame中。
接下来,代码提取了名为`rxn_Smiles`的列的值,并将其存储在名为`smiles`的变量中。
然后,代码使用一个循环遍历每个SMILES字符串,并使用RDKit库的`Chem.MolFromSmiles()`方法将其转换为RDKit分子对象。如果分子对象不为空,则使用`Chem.Draw.MolToMPL()`方法在Matplotlib中绘制结构式。
请注意,为了运行这段代码,你需要安装RDKit和pandas库,并提供正确的CSV文件路径。另外,你可能还需要其他的配置和依赖项来运行该代码。
相关问题
# coding=utf-8 #加载化学库 from rdkit import Chem from rdkit.Chem import Draw from rdkit.Chem import AllChem import pandas as pd # 读取 CSV 文件 data = pd.read_csv('dataSetA.csv') # 提取 rxn_smiles 列 rxn_smiles = data['rxn_Smiles'] # 遍历每个 rxn_smiles 字符串并打印 for smi in rxn_smiles: print(smi) rxn = Chem.AllChem.ReactionFromSmarts(smi) if rxn is not None: # 绘制反应结构 img = Draw.ReactionToImage(rxn) img.show() else: print("Failed to parse rxn_smiles.")最后要保存成图片要怎么写
要将绘制的反应结构保存为图片,您可以使用`img.save`方法来保存图片。以下是修改后的代码示例:
```python
# 遍历每个 rxn_smiles 字符串并保存图片
for i, smi in enumerate(rxn_smiles):
print(smi)
rxn = Chem.AllChem.ReactionFromSmarts(smi)
if rxn is not None:
# 绘制反应结构
img = Draw.ReactionToImage(rxn)
img.save(f'reaction_{i}.png')
else:
print("Failed to parse rxn_smiles.")
```
在上述代码中,添加了一个`enumerate`函数来获得循环的索引值,以便在保存文件时为每个反应结构创建唯一的文件名。通过在`img.save`方法中传递文件名参数,可以将绘制的反应结构保存为PNG文件。
请注意,将文件名设置为`reaction_{i}.png`会根据循环的索引值创建唯一的文件名。如果您希望使用其他文件名格式,请根据需要进行修改。确保在适当的位置进行替换,以指定您希望保存图像的文件路径和文件名。
# coding=utf-8 #加载化学库 from rdkit import Chem from rdkit.Chem import Draw from rdkit.Chem import AllChem import pandas as pd import os import csv # 读取 CSV 文件 data = pd.read_csv('dataSetB.csv') # 提取 rxn_smiles 列 # 获取每一列的数据 smiles_mapping_namerxn = data['rxnSmiles_Mapping_NameRxn'] smiles_mapping_indigotk = data['rxnSmiles_Mapping_IndigoTK'] smiles_indigoautomapperknime = data['rxnSmiles_IndigoAutoMapperKNIME'] # 创建目录 os.makedirs('D:/1/', exist_ok=True) os.makedirs('D:/2/', exist_ok=True) os.makedirs('D:/3/', exist_ok=True) # 遍历每个 rxn_smiles 字符串并打印 #for i, smi in enumerate(smiles_mapping_namerxn): # print(smi) # rxn = chem.allchem.reactionfromsmarts(smi) # if rxn is not none: # # 绘制反应结构 # img = draw.reactiontoimage(rxn) # img.show() # img.save(f'd:/1/reaction_{i}.png') # else: # #当无法解析rxn_smiles时,使用print语句打印出相应的消息,并将无法解析的smi值作为附加信息一起打印。 # print("failed to parse rxn_smiles.", smi) #for i, smi in enumerate(smiles_mapping_indigotk): # print(smi) # rxn = Chem.AllChem.ReactionFromSmarts(smi) # if rxn is not None: # 绘制反应结构 # img = Draw.ReactionToImage(rxn) # img.save(f'D:/2/reaction_{i}.png') # else: # 当无法解析rxn_smiles时,使用print语句打印出相应的消息,并将无法解析的smi值作为附加信息一起打印。 # print("Failed to parse rxn_smiles.", smi) def new_func(smi): rxn = Chem.AllChem.ReactionFromSmarts(smi) return rxn #for i, smi in enumerate(smiles_indigoautomapperknime): # print(smi) # rxn = new_func(smi) # if rxn is not None: with open('your_file.csv', 'r') as file: reader = csv.reader(file) rows = list(reader) for row in rows[42154:]: # 绘制反应结构 img = Draw.ReactionToImage(rxn) img.save(f'D:/3/reaction_{i}.png') lines=lines+1 else: #当无法解析rxn_smiles时,使用print语句打印出相应的消息,并将无法解析的smi值作为附加信息一起打印。 print("Failed to parse rxn_smiles.", smi)什么地方错了。、
在你提供的代码中,有几个问题需要解决:
1. 在使用 `csv.reader()` 读取 CSV 文件之前,你需要将文件路径 `'your_file.csv'` 指定为实际的文件路径,或者确保该文件与代码在同一目录下。
2. 在处理每一行数据之前,你需要根据需要通过 `new_func()` 函数将 SMILES 转化为反应对象 `rxn`。
3. 在 `for` 循环中,你需要使用 `enumerate()` 函数来获取索引 `i` 和对应的行数据 `row`。
修改后的代码示例如下:
```python
from rdkit import Chem
from rdkit.Chem import Draw
import csv
def new_func(smi):
rxn = Chem.AllChem.ReactionFromSmarts(smi)
return rxn
with open('your_file.csv', 'r') as file:
reader = csv.reader(file)
rows = list(reader)
for i, row in enumerate(rows[42154:]):
smi = row[0] # 假设 SMILES 数据在第一列
print(smi)
rxn = new_func(smi)
if rxn is not None:
# 绘制反应结构
img = Draw.ReactionToImage(rxn)
img.save(f'D:/3/reaction_{i}.png')
else:
print("Failed to parse rxn_smiles.", smi)
```
请根据实际情况修改代码中的文件路径和数据列索引,以满足你的需求。另外,请确保相关的库已经正确安装。如果还有其他问题,请提供具体的错误信息,以便我可以更好地帮助你。
阅读全文