请帮我写python代码实现:遍历一个文件里的每一行,读取列名为SMILES的列,不管这一行里面列名为Canonical_SMILES的位置是否为空,都用rdkit来将SMILES转换成Canonical_SMILES,并写入原文件,同理;不管这一行里面列名为Isomeric_SMILES的位置是否为空,都用rdkit来将SMILES转换成Isomeric_SMILES,并写入原文件
时间: 2024-04-21 14:23:19 浏览: 168
下面是一段Python代码实现您的需求:
```python
from rdkit import Chem
import pandas as pd
# 读取文件
data = pd.read_csv('your_file.csv')
# 遍历每一行
for index, row in data.iterrows():
# 读取SMILES列的值
smiles = row['SMILES']
# 转换为Canonical_SMILES
if not pd.isnull(smiles):
mol = Chem.MolFromSmiles(smiles)
canonical_smiles = Chem.MolToSmiles(mol, isomericSmiles=False)
data.at[index, 'Canonical_SMILES'] = canonical_smiles
# 转换为Isomeric_SMILES
if not pd.isnull(smiles):
mol = Chem.MolFromSmiles(smiles)
isomeric_smiles = Chem.MolToSmiles(mol, isomericSmiles=True)
data.at[index, 'Isomeric_SMILES'] = isomeric_smiles
# 将结果写回原文件
data.to_csv('your_file.csv', index=False)
```
请注意,上述代码假设您的文件是一个CSV文件,并且使用pandas库来读取和写入数据。您需要将代码中的'your_file.csv'替换为您实际的文件路径。
在代码中,我们使用rdkit库中的Chem模块来进行SMILES转换。对于每一行,我们首先检查SMILES列是否为空,然后使用rdkit将其转换为Canonical_SMILES和Isomeric_SMILES。最后,我们将结果写回原文件。
希望这能满足您的需求!如果您有更多问题,请随时提问。
阅读全文