怎么用python把csv格式转为sdf格式,并在smiles格式错误时跳过继续运行
时间: 2024-05-09 13:20:39 浏览: 234
要将CSV格式转换为SDF格式,可以使用RDKit Python库。
以下是一个示例代码,它将CSV文件中的SMILES列转换为SDF文件,并在SMILES格式错误时跳过并继续运行。
```python
from rdkit import Chem
from rdkit.Chem import AllChem
import csv
# CSV文件路径
csv_file = 'input.csv'
# SDF文件路径
sdf_file = 'output.sdf'
# 读取CSV文件
with open(csv_file, 'r') as f:
reader = csv.DictReader(f)
mols = []
# 遍历CSV文件中的每一行
for row in reader:
# 根据SMILES字符串创建分子
try:
mol = Chem.MolFromSmiles(row['SMILES'])
# 添加分子到列表中
mols.append(mol)
except:
# 如果SMILES格式错误,则打印错误信息并跳过
print('Error processing SMILES:', row['SMILES'])
continue
# 将所有分子转换为SDF格式并保存到文件中
w = Chem.SDWriter(sdf_file)
for mol in mols:
AllChem.EmbedMolecule(mol)
AllChem.UFFOptimizeMolecule(mol)
w.write(mol)
w.close()
```
在此示例代码中,我们使用了RDKit库中的SDWriter类,该类可将分子对象写入SDF文件中。我们在循环中遍历CSV文件的每一行,如果SMILES字符串格式正确,则使用Chem.MolFromSmiles()函数将其转换为分子对象,并将其添加到分子列表中。如果SMILES格式错误,则打印错误消息并跳过。在处理完所有分子后,我们使用Chem.SDWriter()类将分子列表中的所有分子转换为SDF格式,并将其保存到文件中。
请注意,本示例代码仅处理CSV文件中的SMILES列。如果您需要处理其他列,请相应地修改代码。
阅读全文