for i, smi in enumerate(smiles_indigoautomapperknime): print(smi) rxn = new_func(smi) if rxn is not None: # 绘制反应结构 img = Draw.ReactionToImage(rxn) img.save(f'D:/3/reaction_{i}.png') else: #当无法解析rxn_smiles时,使用print语句打印出相应的消息,并将无法解析的smi值作为附加信息一起打印。 print("Failed to parse rxn_smiles.", smi)
时间: 2024-04-17 19:27:49 浏览: 19
根据你提供的代码,当 `new_func(smi)` 返回一个有效的反应对象 `rxn` 时,你希望将其绘制成图像并保存为 PNG 文件。而当 `rxn` 为 `None` 时,你想打印一条消息指示解析失败,并将无法解析的 `smi` 值作为附加信息一起打印。
这段代码看起来是正确的,没有明显的错误。当然,要确保 `new_func()` 函数能够正确解析 `smi` 并返回一个有效的反应对象。如果你遇到任何问题,可以提供更多的上下文信息和错误消息,以便我能够更好地帮助你。
相关问题
# 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)
```
请根据实际情况修改代码中的文件路径和数据列索引,以满足你的需求。另外,请确保相关的库已经正确安装。如果还有其他问题,请提供具体的错误信息,以便我可以更好地帮助你。
for i, row in enumerate(rows[42160:]): smi = row[8] # 假设 SMILES 数据在第一列 print(smi) rxn = new_func(smi) if rxn is not None: # 绘制反应结构 img = Draw.ReactionToImage(rxn) img.save(f'D:/4/reaction_{i}.png') i=i+1这里i要从42160开始要怎么弄。
要让循环的索引 `i` 从 42160 开,你可以在 `enumerate()` 函数中指定起始索引。下面是修改后的代码示例:
```python
start_index = 42160
for i, row in enumerate(rows[start_index:], start=start_index):
smi = row[8] # 假设 SMILES 数据在第一列
print(smi)
rxn = new_func(smi)
if rxn is not None:
# 绘制反应结构
img = Draw.ReactionToImage(rxn)
img.save(f'D:/4/reaction_{i}.png')
```
在这个示例中,我们使用了 `enumerate(rows[start_index:], start=start_index)` 来指定循环的起始索引为 42160。这样,循环的第一个索引值就会是 42160。
通过这种方式,你可以确保 `i` 的值从 42160 开始递增,与 `rows` 列表中的元素一一对应。
希望这样能帮助到你。如果还有其他问题,请随时提问。