2016-12-14 36 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]])] 
相關問題