我需要在python中读取一个文本文件,并将选定的值放入一个单独的数组中

2024-04-19 21:55:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含如下数据的文本文件

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
3SOL     OW    7   2.1520   2.9020   2.5480
3SOL    HW1    8   2.1351   2.9646   2.6185

最多3000个生料。你知道吗

因此,我需要将选定的值抓取到一个单独的列表中,如下所示:

  X=[1.5040, 1.5210, 2.1520,    etc]
  Y=[2.7580, 0.9510, 2.9020,    etc]
  Z=[0.6820, 2.2050, 2.5480,    etc]

有人能帮我写这段代码吗?你知道吗


Tags: of数据代码列表byetcgenerated文本文件
3条回答

我想这是个好办法。你知道吗

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':
            print('Frame')
            A.write('%s\n' % 'Frame')
            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])

同样的模式可以用来提取数据。你知道吗

如果您的数据保存在my_data.csv中,并且第一行是第一行,那么这应该可以做到。你知道吗

import numpy as np

data = np.genfromtxt('my_data.csv', usecols=[3, 4, 5])[::3]
x, y, z = data.transpose()

如果您有类似示例中的头文件,并且希望从第二行开始,只需将[::3]更改为[1::3]。你知道吗

使用行分割功能,您可以搜索特定的点,然后您可以读取下一个记录后,您已经找到了。就像沙纳卡示意的那样。你知道吗

line.split()[0]=='3000'

相关问题 更多 >