2016-08-17 5 views
-1

У меня есть данные файла, как показано ниже, я хочу рассчитать разницу во времени между двумя линиями для каждой станции (здесь PAR и PAY), я имею в виду, например, для PAR, который мы собираемся рассчитать '7 48 42.64 - 7 48 42.24' (7 = час, 48 = минута и 42,64 - второй).Как извлечь данные из файла?

2006 03 20 07 47 46.7 32.314 55.843 15.5 4.5 
PAR GZ IP 7 48 42.24 
PAR GZ IPg 7 48 42.64 
PAR GZ EP 7 48 42.34 
PAY GZ IPg 7 48 57.96 
PAY GZ IP 7 48 57.59 
PAY GZ EP 7 48 57.74 

В моем коде информация о первой строке сохраняется в списке под названием «event_REF1», и для каждой строки в списке под названием «REF1_station». Сначала он ищет «IP», а затем «IPg», для PAR нет проблем, но для PAY он делает неправильный результат, потому что сначала у нас есть «IPg» в данных для этой станции.

if (REF1_station[0][2] == "IP "): 
      earlier = (float(REF1_station[0][3])*3600+ 
         float(REF1_station[0][4])*60+ 
         float(REF1_station[0][5])- 
         float(event_REF1[3])*3600- 
         float(event_REF1[4])*60- 
         float(event_REF1[5])) 

if (REF1_station[0][2] == "IPg"):   
      later = (float(REF1_station[0][3])*3600+ 
        float(REF1_station[0][4])*60+ 
        float(REF1_station[0][5])- 
        float(event_REF1[3])*3600- 
        float(event_REF1[4])*60- 
        float(event_REF1[5])) 
      error = float((later - earlier)/2) 

Результат:

PAR = 0,199999999999

PAY = 7,86

+0

Вопросы, ищущих отладки помощи (** «почему работает не этот код?» **) должен включать в себя желаемое поведение, * конкретную проблему или ошибку * и * самый короткий код, необходимый *, чтобы воспроизвести его * * в самом вопросе **. Вопросы без ** ясного заявления о проблеме ** не полезны для других читателей. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). – MattDMo

ответ

0

Если ваши линии последовательно разделяются пробелами, то вы можете просто перебирать файл, чтобы получить все строки в удобном для использования формате и вычесть любые две строки, которые вы хотите.

all_lines = open('your_file.txt', 'r').readlines() 
all_lines = [l.split() for l in all_lines] 

# Hour is index 3, Minute is 4, seconds is 5 
Смежные вопросы