我有一个gromac文件从中提取特定的细节。文件格式如下。只有我需要每列中的值。
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
我已尝试使用以下代码进行阅读。
F = open('Data.gro', 'r')
for line in F:
P = line.split('\t')
我想将以下数据提取到浮点变量中。
我的想法是在拆分数据后称为P [3],P [4],P [6] 但我失败了。 当我正在阅读文件时,我希望在3000行之后跳过信息。每3000行后有三行给出的信息。而且我也想跳过前两行。 .gro文件具有特定格式。
http://manual.gromacs.org/current/online/gro.html
输出应该如下。我将使用这些值进行一些计算。
首先设置
X = [1.5040, 1.4788, 14640,... , 1.6006]
Y = [2.7580, 2.7853, , 1.7369]
Z = [0.6820, 0.7702, , 2.2286]
第二集
X = [1.1579, 1.0743, ,... , 2.5365]
Y = [0.4255, 0.3793, ,... , 0.9642]
Z = [2.1329, 2.1329, ,... , 0.5197]
请完整阅读我的问题。我需要一些指导来编写上述程序。我是python的新手。我做过研究,但是找不到任何帮助来提取这些数字。
谢谢
答案 0 :(得分:3)
最后,我能够编写完整的程序来阅读我的gromac文件。如果想从grmomac文件中读取数据并从中提取特定值,这可能对某些人有帮助。此代码调整为在特定位置查找后读取10行。我用这个来读3000行。这是成功的100%。
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("%s\n" % (XO))
A.write("%s\n" % (YO))
A.write("%s\n\n" % (ZO))
A.write('Hydrogen 1 atoms XYZ coordinates:' + '\n')
A.write("%s\n" % (XHW1))
A.write("%s\n" % (YHW1))
A.write("%s\n\n" % (ZHW1))
A.write('Hydrogen 2 atoms XYZ coordinates:' + '\n')
A.write("%s\n" % (XHW2))
A.write("%s\n" % (YHW2))
A.write("%s\n\n" % (ZHW2))
XO = []
YO = []
ZO = []
XHW1 = []
YHW1 = []
ZHW1 = []
XHW2 = []
YHW2 = []
ZHW2 = []
R +=1
else:
pass
else:
pass
A.close()
Thanx有些人帮我解决具体问题。 Thanx也去找他们。这是一个非常好的网站。我喜欢这个。这有助于学习东西。