python学习笔记:读取mol2文件
xyz 和mol2的文件在日常使用过程是十分常见。mol2的格式也十分独特,在实验的过程当中,需要对一些数据进行大量清洗方可以达到使用目标。例如单独对碳,氢进行加工使用,例如抽取一个苯环来做探索分子间的作用力的探索等等。这个过程就要一点点对mol2文件进行加工。1.写法众多,思路倾向目的一致我查看了几种关于mol2解析的写法,有一些写法很高级,也有一些符合初级的写法。大概我举例,常见一种思路是采取
xyz 和mol2的文件在日常使用过程是十分常见。mol2的格式也十分独特,在实验的过程当中,需要对一些数据进行大量清洗方可以达到使用目标。
例如单独对碳,氢进行加工使用,例如抽取一个苯环来做探索分子间的作用力的探索等等。这个过程就要一点点对mol2文件进行加工。
1.写法众多,思路倾向目的一致
我查看了几种关于mol2解析的写法,有一些写法很高级,也有一些符合初级的写法。
大概我举例,常见一种思路是采取遍历方式对整个文件进行遍历操作。
这里就可以采用for in 或者while 循环去解析出来。
还有一些会采取迭代器去处理,这种对存储和内存优化会好一些,只不过这种方式读取没有list那样直观。
1.1 读取mol2文件
mol2的文件有一个结构记录了一些原子数据。从@ATOM 到 @BOND里面,至于@BOND 这里记录一些链接的信息,但是我们并不需要这部分数据。因此在解析文件当中只需要截取一段数据即可。
@ATOM
…只需要这里数据
@BOND
###
### Created by X-TOOL on Mon Sep 10 21:12:46 2018
###
@<TRIPOS>MOLECULE
1a52_ligand
44 47 1 0 0
SMALL
GAST_HUCK
@<TRIPOS>ATOM
1 C1 107.0080 15.8600 99.4560 C.ar 1 EST -0.0749
2 C2 106.9320 16.9300 100.3660 C.ar 1 EST -0.0468
3 C3 106.8330 18.2290 99.8920 C.ar 1 EST 0.0739
4 O3 106.8010 19.2390 100.8130 O.3 1 EST -0.3393
5 C4 106.7930 18.5030 98.4870 C.ar 1 EST -0.0385
6 C5 106.8760 17.4240 97.5440 C.ar 1 EST -0.0491
7 C6 106.9380 17.7140 96.0430 C.3 1 EST -0.0236
8 C7 107.3090 16.5030 95.1650 C.3 1 EST -0.0396
9 C8 106.6720 15.1910 95.6810 C.3 1 EST -0.0259
10 C9 107.1900 14.8700 97.1230 C.3 1 EST -0.0116
11 C10 106.9980 16.0650 98.0500 C.ar 1 EST -0.0484
12 C11 106.5900 13.5520 97.6420 C.3 1 EST -0.0421
13 C12 106.7820 12.3640 96.6670 C.3 1 EST -0.0433
14 C13 106.3220 12.6680 95.2400 C.3 1 EST -0.0028
15 C14 107.0200 13.9910 94.7660 C.3 1 EST -0.0285
16 C15 106.7430 14.0160 93.2620 C.3 1 EST -0.0469
17 C16 106.9650 12.5440 92.8370 C.3 1 EST -0.0261
18 C17 106.8760 11.6910 94.1710 C.3 1 EST 0.0609
19 O17 106.1970 10.4170 93.9680 O.3 1 EST -0.3912
20 C18 104.7600 12.6910 95.1400 C.3 1 EST -0.0569
21 H1 107.0763 14.8482 99.8391 H 1 EST 0.0511
22 H2 106.9508 16.7397 101.4330 H 1 EST 0.0468
23 H3 106.0503 19.1223 101.3833 H 1 EST 0.2457
24 H4 106.7001 19.5244 98.1359 H 1 EST 0.0462
25 H5 107.6897 18.4998 95.8771 H 1 EST 0.0410
26 H6 105.9503 18.0781 95.7238 H 1 EST 0.0410
27 H7 108.4030 16.3888 95.1628 H 1 EST 0.0290
28 H8 106.9575 16.6880 94.1392 H 1 EST 0.0290
29 H9 105.5796 15.3173 95.7067 H 1 EST 0.0326
30 H10 108.2753 14.7077 97.0478 H 1 EST 0.0429
31 H11 105.5121 13.6994 97.8043 H 1 EST 0.0286
32 H12 107.0737 13.3008 98.5975 H 1 EST 0.0286
33 H13 106.2049 11.5068 97.0441 H 1 EST 0.0273
34 H14 107.8504 12.1037 96.6408 H 1 EST 0.0273
35 H15 108.1072 13.8650 94.8756 H 1 EST 0.0311
36 H16 107.4438 14.6864 92.7429 H 1 EST 0.0269
37 H17 105.7104 14.3345 93.0563 H 1 EST 0.0269
38 H18 107.9545 12.4248 92.3715 H 1 EST 0.0290
39 H19 106.1856 12.2283 92.1278 H 1 EST 0.0290
40 H20 107.8995 11.4310 94.4789 H 1 EST 0.0599
41 H21 106.6710 9.9062 93.3223 H 1 EST 0.2098
42 H22 104.3545 13.3814 95.8943 H 1 EST 0.0236
43 H23 104.3661 11.6797 95.3192 H 1 EST 0.0236
44 H24 104.4617 13.0282 94.1363 H 1 EST 0.0236
@<TRIPOS>BOND
1 1 2 ar
2 1 11 ar
3 2 3 ar
4 3 4 1
5 3 5 ar
6 5 6 ar
7 6 7 1
8 6 11 ar
9 7 8 1
10 8 9 1
11 9 10 1
12 9 15 1
13 10 11 1
14 10 12 1
15 12 13 1
16 13 14 1
17 14 15 1
18 14 18 1
19 14 20 1
20 15 16 1
21 16 17 1
22 17 18 1
23 18 19 1
24 1 21 1
25 2 22 1
26 4 23 1
27 5 24 1
28 7 25 1
29 7 26 1
30 8 27 1
31 8 28 1
32 9 29 1
33 10 30 1
34 12 31 1
35 12 32 1
36 13 33 1
37 13 34 1
38 15 35 1
39 16 36 1
40 16 37 1
41 17 38 1
42 17 39 1
43 18 40 1
44 19 41 1
45 20 42 1
46 20 43 1
47 20 44 1
@<TRIPOS>SUBSTRUCTURE
1 EST 1
1.2 使用python读取mol2文件
python 读取里面文件,并对其进行遍历处理。这种方式处理起来比较简单。只需要截取一段我们要的数据即可。
def read_mol2_file(filename):
atoms = []
with open(filename, 'r') as f:
all_line = f.read().split("\n")
begin = False
for line in all_line:
if line.startswith("@<TRIPOS>ATOM"):
begin = True
continue
if line.startswith("@<TRIPOS>BOND"):
break
if begin:
atoms.append(line.rstrip())
return atoms
atomlist = read_mol2_file('1a52_ligand.mol2')
print(atomlist)
for atom in atomlist:
atomitem = atom.split()
print(atomitem)
通过pycharm来断点查看,该数据展示了获取到mol2文件的数据。
接下来,解析到每一行的数据,可以看到 其中的原子里面信息。
1.3 获取mol2文件有用信息
从上面的信息可以得到一堆原子数据。有了这个信息可以拿到里面xyz的坐标信息,碳的特性,氢的特性等等了
2.mol2和xyz之间转换
mol2解析完可以拿到对应的数据,这样切换2者之间的方法自然就有了。
mol2的一些文件里面包含了一些苯环结构,这部分结构拿出来后就可以利用编程的方法来计算。
好了,简单的解析读取就完成了你就可以随便玩。下面还顺便带上另外一种在其他地方看到写法。两者也可以用来解析读取mol2文件。
def read_mol2_file(filename):
atoms = []
with open(filename, 'r') as f:
while not f.tell() == os.fstat(f.fileno()).st_size:
line = f.readline()
if line.startswith("@<TRIPOS>ATOM"):
atoms = []
line = f.readline()
while not line.startswith("@<TRIPOS>BOND"):
atoms.append(line)
line = f.readline()
if f.tell() == os.fstat(f.fileno()).st_size:
atoms.append(line)
break
atoms[-1] = atoms[-1].rstrip()
return atoms
更多推荐
所有评论(0)