python学习笔记:读取xyz文件
在药学的Ai研发过程中,经常要制作清洗文件和处理各种文件格式。利用openBabel这样功能能够大大减轻转换过程的麻烦。然而偶然也需要应对一下场景下处理xyz文件抽取相关的坐标体系去计算小分子之间的作用力。用于制药方面探索发现。我们知道通过Rust写起来会繁琐一些,python在书写方面处理文件相对容易一些。相对2者,Rust性能就摆在那里,这是python无法比拟的。不过在大多数科研领域,pyt
在药学的Ai研发过程中,经常要制作清洗文件和处理各种文件格式。利用openBabel这样功能能够大大减轻转换过程的麻烦。然而偶然也需要应对一下场景下处理xyz文件抽取相关的坐标体系去计算小分子之间的作用力。用于制药方面探索发现。
我们知道通过Rust写起来会繁琐一些,python在书写方面处理文件相对容易一些。相对2者,Rust性能就摆在那里,这是python无法比拟的。不过在大多数科研领域,python的优势还是很明显不用过于在乎语法门槛。
python处理这些文件经常有2个常见任务,一是处理同种的文件提取关键信息,二是批量处理对应的关键信息。这一些对于不是编程领域的科研人员会有一些头脑之处。
下面简单一点读取一个体系的xyz文件,处理返回这个体系的xyz三维坐标。(这里没有涉及到面向对象去封装。仅仅只是一个小小案例)
# 12
#
# C 19.51600 14.54700 13.49400
# C 19.29600 15.68700 14.23800
# H 18.77340 15.62000 15.18530
# C 19.72400 16.87500 13.79700
# H 19.56810 17.76250 14.39960
# C 20.35800 16.97500 12.58800
# H 20.69480 17.94310 12.23520
# C 20.56200 15.90100 11.84900
# H 21.04700 15.99740 10.88430
# C 20.16600 14.66300 12.29000
# H 20.36530 13.78170 11.69110
# H 19.18030 13.57230 13.85480
def read_one_xyz(filename):
xyz = []
with open(filename, 'r') as f:
content = f.read()
contact = content.split('\n')
for line in contact:
if line == '' or line.isdigit():
continue
else:
atom = line.split()
xyzitem = {'symbol': atom[0], 'position': {"x": atom[1], "y": atom[2], "z": atom[3]}}
xyz.append(xyzitem)
return xyz
if __name__ == '__main__':
xyz = read_one_xyz('1obx_b2.xyz')
for f in xyz:
print(f)
读取之后,看看这个文件数据。看如下图,看起来非常简单将数据
提取出来。
好了,这个就是对一个文件的读取。利用Avogadro工具观察我们读取的文件。刚好我们提取是一个苯环结构构象。有2给化学键。一个碳和一个氢。
这个就是我们研究的苯环对象信息。
好了,利用python的便利之处,就可以方便为我们计算带来方便之门。
更多推荐
所有评论(0)