чтение данных с заголовком переменной длины - PullRequest
0 голосов
/ 29 октября 2018

Я хочу прочитать в python файл, который содержит заголовок переменной длины, а затем извлечь в блок данных / серию переменные, которые идут после заголовка.
Данные выглядят так:

....................................................................
Data coverage and measurement duty cycle:
When the instrument duty cycle is not in measure mode (i.e. in-flight     
calibrations) the data is not given here (error flag = 2). 

The measurements have been found to exhibit a strong sensitivity to cabin 
pressure.
Consequently the instrument requires calibrated at each new cabin    
pressure/altitude.

Data taken at cabin pressures for which no calibration was performed is    
not given here (error flag = 2).
Measurement sensivity to large roll angles was also observed.
Data corresponding to roll angles greater than 10 degrees is not given    
here (error flag = 2)
......................................................................
High Std: TBD ppb
Target Std: TBD ppb
Zero Std: 0 ppb

Mole fraction error flag description :
0 : Valid data
2 : Missing data
31636 0.69 0
31637 0.66 0
31638 0.62 0
31639 0.64 0
31640 0.71 0
.....
..... 

Итак, я хочу извлечь данные как:

    Time    C2H6  Flag
0  31636  0.69 0   NaN
1  31637  0.66 0   NaN
2  31638  0.62 0   NaN
3  31639  0.64 0   NaN
4  31640  0.71 0   NaN
5  31641  0.79 0   NaN
6  31642  0.85 0   NaN
7  31643  0.81 0   NaN
8  31644  0.79 0   NaN
9  31645  0.85 0   NaN

Я могу сделать это с

infile="/nfs/potts.jasmin-north/scratch/earic/AEOG/data/mantildas_faam_20180911_r1_c118.na"
flightdata = pd.read_fwf(infile, skiprows=53, header=None, names=['Time', 'C2H6', 'Flag'],)

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

Mole fraction error flag description :
0 : Valid data
2 : Missing data

что мне делать? А как насчет других критериев, которые будут работать лучше?

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете разделить разделитель заголовка следующим образом:

with open(filename, 'r') as f:
    myfile = f.read()
infile = myfile.split('Mole fraction error flag description :')[-1]
# skip lines with missing data
infile = infile.split('\n')
# likely a better indicator of a line with incorrect format, you know the data better
infile = '\n'.join([line for line in infile if ' : ' not in line])
# create dataframe
flightdata = pd.read_fwf(infile, header=None, names=['Time', 'C2H6', 'Flag'],)
...