1 ChemicalReactionParserException: a reaction requires at least two > characters 堆栈跟踪: > File "C:\Users\nerwork\source\repos\Print Structural\Print_Structural.py", line 67, in new_func > File "C:\Users\nerwork\source\repos\Print Structural\Print_Structural.py", line 77, in <module> (Current frame) 已加载“__main__” 已加载“runpy” 程序“python.exe”已退出,返回值为 0 (0x0)。
时间: 2023-07-22 09:09:42 浏览: 148
根据你提供的错误信息,`ChemicalReactionParserException: a reaction requires at least two > characters`,这说明在解析反应 SMILES 时出现了问题。该错误是由于反应 SMILES 字符串中没有至少两个 `>` 符号,因此无法识别为有效的反应。
请确保你的反应 SMILES 字符串遵循正确的格式,包括至少两个反应物和至少一个生成物,使用 `>` 符号分隔它们。例如,一个有效的反应 SMILES 可能是类似这样的:`CCO.[O-]C(=O)C1=CC=CC=C1>>CCOC(=O)C1=CC=CC=C1`。
如果你确定你的反应 SMILES 字符串是正确的,并且仍然遇到此错误,请提供具体的反应 SMILES 字符串示例,以便我可以更好地帮助你解决问题。
相关问题
ValueError: ChemicalReactionParserException: multi-step reactions not supported
对不起,上述代码有误。RDKit库中的`AllChem.ReactionFromSmarts`函数不支持多步反应。如果您需要执行多步反应的分子逆合成,您可以尝试使用其他化学软件或库,如OpenEye的OEChem或RDKit的CIPSTER。
以下是使用OpenEye的OEChem库执行多步反应的示例代码:
```python
from openeye import oechem
# 创建目标分子
target_smiles = "CCOC(=O)CC"
target_mol = oechem.OEMol()
oechem.OESmilesToMol(target_mol, target_smiles)
# 创建起始分子
starting_smiles = "CC(=O)OCC"
starting_mol = oechem.OEMol()
oechem.OESmilesToMol(starting_mol, starting_smiles)
# 创建反应系统
reaction = oechem.OEUniMolecularRxn()
reaction.Init("[OH:1].[H:2][C:3](=[O:4])[O:5]>>[O:1]>>[H:2][C:3](=[O:4])[O:5]")
# 进行反应
product = oechem.OEMol()
if reaction.IsValid():
reaction(product, target_mol)
# 输出结果
product_smiles = oechem.OEMolToSmiles(product)
print(product_smiles)
```
请注意,上述示例代码使用了OpenEye的OEChem库,并使用了`OEUniMolecularRxn`类来执行多步反应。您需要安装OpenEye工具包并导入相应的模块,以使上述代码正常运行。
请确保您已正确安装所需的软件库,并根据您的具体需求和化学反应进行适当的调整。分子逆合成是一个复杂的领域,实际应用中可能需要更复杂的算法和技术来解决问题。
[Errno 2] No such file or directory: 'D:/1/reaction_{i}.png'
出现"[Errno 2] No such file or directory: 'D:/1/reaction_{i}.png'"的错误是因为指定的目录或文件不存在。
请确保指定的目录(例如'D:/1/')存在,并且具有正确的读写权限。如果目录不存在,请创建它。您可以使用`os.makedirs()`函数来创建多层级的目录:
```python
import os
# 创建目录
os.makedirs('D:/1/', exist_ok=True)
```
另外,请注意在保存文件时,使用正确的文件名格式,以替换`{i}`为实际的索引数字。以下是修正后的代码示例:
```python
import pandas as pd
from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem import AllChem
import os
# 读取数据文件
data = pd.read_csv('input.csv')
# 获取rxn_smiles列的数据
rxn_smiles = data['rxn_smiles']
# 创建目录
os.makedirs('D:/1/', exist_ok=True)
# 遍历每个 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.show()
img.save(f'D:/1/reaction_{i}.png')
else:
print("Failed to parse rxn_smiles:", smi)
```
在上述代码中,我们使用`os.makedirs()`函数创建了目录`D:/1/`,并在保存图像时使用了正确的文件名格式。请根据实际情况修改目录的路径,确保文件路径的正确性。