2016-12-14 37 views
0

我有一个包含数字以及字符串/文本数据的文件。我希望所有的数字数据都存储在一个数组中(忽略非数字数据)。如果文件是纯数字,我可以使用numpy.loadtxt来完成。然而,这种情况并非如此。示例文件如下所示从python中将文件中的所有数字数据提取到数组中

BEGIN FILE 

SECTION1-TEXTINFO 
------------------------------------------------------ 
      2.768000  0.000001  0.000001 
      0.000001  2.644491 -0.000018 
      0.000001 -0.000018  2.572420 
------------------------------------------------------ 
SECTION2 
------------------------------------------------------ 
      2.768000  0.000001  0.000001 
      0.000001  2.644491 -0.000018 
      0.000001 -0.000018  2.572420 
------------------------------------------------------ 
SECTION3 
------------------------------------------------------ 
      0.000343 -0.000000 -0.000000 
      -0.000000  0.039522 -0.000000 
      -0.000000 -0.000000  0.029825 
------------------------------------------------------ 
END FILE 

因此,在一天结束时,我想将所有数值数据存储在9 * 3数组中。

非常感谢您的帮助提前

+0

你能告诉你的代码已经试过吗? – eyllanesc

+0

直到现在,我正在将包含数字数据的特定行号码复制到一个临时文件,然后使用numpy.loadxt(“temp-file”) –

+0

对于examplelines = open('POSCAR')。readlines() open('POSCAR ('POSCAR-temp','a')。writelines(lines [8:]) data = np.loadtxt(“'temp'','w')。writelines(lines [2:5]) data = POSCAR-temp“) –

回答

0
import numpy as np 


def isFloat(element): 
    try: 
     float(element) 
     return True 
    except ValueError: 
     return False 

with open('data.txt', 'r') as infile: 
    matrix_numpy = [] 
    matrix = [] 
    for line in infile: 
     str = " ".join(line.split()) 
     data = [float(s) for s in str.split() if isFloat(s)] 
     if data: 
      matrix.append(data) 
    for i in range(int(len(matrix)/3)): 
     matrix_numpy.append(np.asarray(matrix[3*i:3*i+3])) 

    print(matrix_numpy) 

输入:

BEGIN FILE 

SECTION1-TEXTINFO 
------------------------------------------------------ 
      2.768000  0.000001  0.000001 
      0.000001  2.644491 -0.000018 
      0.000001 -0.000018  2.572420 
------------------------------------------------------ 
SECTION2 
------------------------------------------------------ 
      2.768000  0.000001  0.000001 
      0.000001  2.644491 -0.000018 
      0.000001 -0.000018  2.572420 
------------------------------------------------------ 
SECTION3 
------------------------------------------------------ 
      0.000343 -0.000000 -0.000000 
      -0.000000  0.039522 -0.000000 
      -0.000000 -0.000000  0.029825 
------------------------------------------------------ 
END FILE 

输出:

[array([[ 2.76800000e+00, 1.00000000e-06, 1.00000000e-06], 
     [ 1.00000000e-06, 2.64449100e+00, -1.80000000e-05], 
     [ 1.00000000e-06, -1.80000000e-05, 2.57242000e+00]]), 
array([[ 2.76800000e+00, 1.00000000e-06, 1.00000000e-06], 
     [ 1.00000000e-06, 2.64449100e+00, -1.80000000e-05], 
     [ 1.00000000e-06, -1.80000000e-05, 2.57242000e+00]]),  
array([[ 0.000343, -0.  , -0.  ], 
     [-0.  , 0.039522, -0.  ], 
     [-0.  , -0.  , 0.029825]])] 
相关问题