Python: чтение текстового файла с переменной компоновкой, доступ к строке на основе имени столбца, если он существует

#python-3.x #pandas #numpy #txt #genfromtxt

Вопрос:

У меня есть текстовый файл с различной компоновкой. Я хочу иметь возможность прочитать все это, но иметь его там, где я могу найти строку на основе имени первого столбца (иногда строка вообще не имеет имени столбца, как показано ниже).

 Data1 (in)                                13.625
Data2  (in)                                      2.875
Data3  (in)                                            5.750
Data4  (in)                                   18.500
Data5  (lbm)                             724.042
Data6  (in)                           2.875
Data7  (in)                            0.000

                                                    Start          End
--------------------------------------------------------------------------------
Data8  (in^3)                             98.424              92.119
Data9  (in^3)                                 0.000               0.000

                               INFORMATION                                
                               -----------------                                
                               Start                     End           
                            S      D        S      D
                    ------------------------------------------------------------
Data10                  2              2              2              2
Data11(in)                  6.755          6.730          6.755          6.730
Data12           String1                                    String2                                 String3                                 String4                                 
Data13               39             39             39             39
Data14(in)              0.118          0.118          0.118          0.118
Data15(in^2)               9.793          9.793          9.793          9.793

CONDITIONS
--------------------------------------------------------------------------------
             R    P(psi)      T(F)     EP(psi)
--------------------------------------------------------------------------------
         890.000         192.661         107.996         517.661
--------------------------------------------------------------------------------
 

Вещи, которые я пробовал:

  • просто для цикла
 output = {}
for linenum, line in enumerate(results):
    if line.startswith("data1 (in)"):
        column = line.split(")")
        f= line.split(")")[1].split()
        output["f"] = round(float(f[0]), 3)
 
  • numpy.genfromtxt() дает только строковое представление всей строки
 table = np.genfromtxt(outfile, invalid_raise=False, missing_values = "", filling_values=np.nan,names=True, delimiter='s ', dtype=None)
 
  • pandas read_table дает всю строку в качестве первого столбца
         data = pd.read_table(outfile, sep="/ss /g", skiprows=6, header=None, engine="python")
        print(data[0][18])
 

Есть ли более простой способ сделать это, кроме цикла for, как если бы операторы могли выйти из-под контроля