我有一个gromac文件,可从中提取特定细节.文件格式如下.只有我需要每一列中的值.
<code>Generated by trjconv : a bunch of waters t= 0.00000
3000
1SOL OW 1 1.5040 2.7580 0.6820
1SOL HW1 2 1.4788 2.7853 0.7702
1SOL HW2 3 1.4640 2.8230 0.6243
2SOL OW 4 1.5210 0.9510 2.2050
2SOL HW1 5 1.5960 0.9780 2.1520
2SOL HW2 6 1.4460 0.9940 2.1640
1000SOL OW 2998 1.5310 1.7952 2.1981
1000SOL HW1 2999 1.4560 1.7375 2.1836
1000SOL HW2 3000 1.6006 1.7369 2.2286
3.12736 3.12736 3.12736
Generated by trjconv : a bunch of waters t= 9000.00000
3000
1SOL OW 1 1.1579 0.4255 2.1329
1SOL HW1 2 1.0743 0.3793 2.1385
1SOL HW2 3 1.1514 0.4772 2.0526
2SOL OW 4 2.2976 2.5403 0.1574
2SOL HW1 5 2.2161 2.4981 0.1847
2SOL HW2 6 2.3118 2.6092 0.2223
1000SOL OW 2998 2.5927 1.0233 0.4695
1000SOL HW1 2999 2.5927 0.9869 0.3810
1000SOL HW2 3000 2.5365 0.9642 0.5197
3.10941 3.10941 3.10941
</code>
我已经尝试按照以下代码阅读.
<code>F = open('Data.gro', 'r')
for line in F:
P = line.split('t')
</code>
我想提取数据如下以浮动变量.
我的想法是拆分数据后称为P [3],P [4],P [6]
但是我失败了.
当我读取文件时,我想在3000行之后跳过信息.每隔3000行就有三行给出信息.我也想跳过前两行. .gro文件具有特定格式.
http://manual.gromacs.org/current/online/gro.html
输出应如下.我将使用这些值进行一些计算.
第一组
<code>X = [1.5040, 1.4788, 14640,... , 1.6006] Y = [2.7580, 2.7853, , 1.7369] Z = [0.6820, 0.7702, , 2.2286] </code>
第二组
<code>X = [1.1579, 1.0743, ,... , 2.5365] Y = [0.4255, 0.3793, ,... , 0.9642] Z = [2.1329, 2.1329, ,... , 0.5197] </code>
请完整阅读我的问题解答.我需要一些指导来编写上述程序.我是python的新手.我已经进行了研究,但找不到任何帮助来提取这些数字.
谢谢
解决方法:
最终,我能够编写完整的程序来读取我的gromac文件.如果要从grmomac文件读取数据并从中提取特定值,这可能会对某些人有所帮助.将此代码调整为在找到特定位置后读取10行.我用它来读取3000行.这正在100%成功地工作.
<code>F = open('Data.gro', 'r')
A = open('XYZ.txt', 'w')
XO = []
YO = []
ZO = []
XHW1 = []
YHW1 = []
ZHW1 = []
XHW2 = []
YHW2 = []
ZHW2 = []
I = range(1, 10)
with open('Data.gro') as F:
for line in F:
if line.split()[0] == '3000':
A.write('Frame' + 'n')
for R in I:
line = next(F)
P = line.split()
if P[1] == 'OW':
x = float(P[3])
y = float(P[4])
z = float(P[5])
XO.append(x)
YO.append(y)
ZO.append(z)
else:
if P[1] == 'HW1':
x = float(P[3])
y = float(P[4])
z = float(P[5])
XHW1.append(x)
YHW1.append(y)
ZHW1.append(z)
else:
if P[1] == 'HW2':
x = float(P[3])
y = float(P[4])
z = float(P[5])
XHW2.append(x)
YHW2.append(y)
ZHW2.append(z)
else:
pass
if line.split()[2] == '3000':
A.write('Oxygen atoms XYZ coordinates:' + 'n')
A.write("%sn" % (XO))
A.write("%sn" % (YO))
A.write("%snn" % (ZO))
A.write('Hydrogen 1 atoms XYZ coordinates:' + 'n')
A.write("%sn" % (XHW1))
A.write("%sn" % (YHW1))
A.write("%snn" % (ZHW1))
A.write('Hydrogen 2 atoms XYZ coordinates:' + 'n')
A.write("%sn" % (XHW2))
A.write("%sn" % (YHW2))
A.write("%snn" % (ZHW2))
XO = []
YO = []
ZO = []
XHW1 = []
YHW1 = []
ZHW1 = []
XHW2 = []
YHW2 = []
ZHW2 = []
R +=1
else:
pass
else:
pass
A.close()
</code>
谢谢一些人帮助我解决具体问题. Thanx也去他们那里.这是一个非常不错的网站.我喜欢这个.这对学习东西很有帮助.
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!