在mol2文件里面存在C.ar 文件众多,还有一些不带C.ar的文件存在。要找到包含C.ar的文件是一件很容易的事情,但是要找一个只包含只有6个C.ar 组成的苯环结构,这个时候就要用到清洗文件。将一些不包含文件清洗过滤掉。
1 含有C.ar文件情况
以1a0q_ligand.mol2为例
包含6个C.ar 的文件。
以1a4m_ligand.mol2为例
不包含C.ar 的文件
2 查找含有6个C.ar的文件
下面采用2种代码来判定返回结构是否只含有6个C.ar文件,其中带上2种写法。
第一种写法findcar6是通过正则方式一次性返回一个带.ar 数据列表。但是这个列表中是否存在6个,且全部是C.ar 呢? 这个时候只要一个不存在,则这个判定就不成立了。
当全部条件成立后,就可以把这个文件纳入清洗目标了。
第二种写法findecar66 会更加简洁一点,正则检测后,统计列表是否全部包含6个C.ar,满足条件则可以。否则就判定不满足条件。
import re
def findcar6(mol2file):
pattern = re.compile(r'\w+\.ar')
with open(mol2file, 'r') as f:
content = f.read()
ret_list = pattern.findall(content)
if len(ret_list) == 6:
ok = True
for ar in ret_list:
if ar != 'C.ar':
ok = False
print(mol2file + '不符选型')
if ok:
print(mol2file + '包含6个C.ar')
else:
print(mol2file + '不包含6个C.ar')
def findcar66(mol2file):
pattern = re.compile(r'\w+\.ar')
with open(mol2file, 'r') as f:
content = f.read()
ret_list = pattern.findall(content)
num = ret_list.count('C.ar')
if num == 6:
print(mol2file + '包含6个C.ar')
else:
print(mol2file + '不包含6个C.ar')
if __name__ == "__main__":
findcar66('1a0q_ligand.mol2')
findcar66('1a4m_ligand.mol2')
运行结果可以看到对应运行情况。