import os
from rdkit import Chem
# 指定包含MOL文件的目录路径
mol_directory = 'E:/AIDDproject/Pycharm/rdkit/sdfTOsmile'
# 获取目录中的所有MOL文件
mol_files = [f for f in os.listdir(mol_directory) if f.endswith('.mol')]
# 创建一个空的SMILES文件
output_file_name = 'output.smiles'
smiles_file = open(output_file_name, 'w')
# 遍历目录中的每个MOL文件并将其转换为SMILES格式
for mol_file in mol_files:
mol_file_path = os.path.join(mol_directory, mol_file)
mol = Chem.MolFromMolFile(mol_file_path)
if mol is not None:
# 使用Chem.MolToSmiles函数将MOL文件转换为SMILES格式
smiles = Chem.MolToSmiles(mol)
# 写入SMILES到输出文件
smiles_file.write(smiles + '\n')
# 关闭输出文件
smiles_file.close()
需要注意一点的是,文件目录和直接复制下来的,转折符需要换个方向
这里遇到了一个问题,生成的smile文件中,没按读取的化合物的顺序排列,带来了极大的困扰(只生成了一个总的smile文件)
修改后的代码:
import os
from rdkit import Chem
# 指定包含MOL文件的目录路径
mol_directory = 'E:/AIDDproject/Pycharm/rdkit/sdfTOsmile'
# 获取目录中的所有MOL文件
mol_files = [f for f in os.listdir(mol_directory) if f.endswith('.mol')]
# 遍历目录中的每个MOL文件并将其转换为单独的SMILES文件
for mol_file in mol_files:
mol_file_path = os.path.join(mol_directory, mol_file)
mol = Chem.MolFromMolFile(mol_file_path)
if mol is not None:
# 使用Chem.MolToSmiles函数将MOL文件转换为SMILES格式
smiles = Chem.MolToSmiles(mol)
# 创建一个单独的SMILES文件以保存每个MOL结构
output_file_name = os.path.splitext(mol_file)[0] + '.smiles'
smiles_file = open(output_file_name, 'w')
smiles_file.write(smiles)
smiles_file.close()
本套代码,给每个输入的mol文件,单独生成一个smile文件,不会出现乱序的问题