2015-09-01 2 views
0

У меня есть одна временная метка, например 2015-08-31-21.43.47.986782, и мне нужно получить все данные, полученные между этой меткой времени и текущей временной меткой системы. Как мне это сделать? Мне нужно идти на какое-то условие? Если да, просьба уточнитьКак получить данные между двумя временными отметками

+2

Здесь информации недостаточно. Вы запрашиваете данные как продолжительность или дату начала и окончания? – Gusdor

+0

Вам нужен запрос к базе данных? или что-то другое. – VIVEK

+0

Мне нужно сделать это через скрипт оболочки. На самом деле у меня есть одна временная метка, до которой были записаны некоторые записи. Теперь мне нужно получить данные, взятые между этой меткой времени и текущей временной меткой системы. –

ответ

0

Я бы использовал Python и regex. Если данные формы

2015-08-31-21.43.47.986782 zero data data the data some thing else and 
some more data 
one data data the data some thing else and some more data 
two data data the data some thing else and some more data 
three data data the data some thing else and some more data 
four data data the data some thing else and some more data 
2015-08-31-22.43.47.986782 zero this is some other datathis is some other datathis is some other data 
one this is some other data 
two this is some other data 
three this is some other data 
four this is some other data 
five this is some other data 
2015-08-31-23.43.47.986782 zero This data is completely new 
one This data is completely new 
two This data is completely new 
three This data is completely new 

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

#!/usr/bin/env python 
import re 
fp   = open('thefilename.log') 
md   = None 
for thisRec in fp: 
    # get rid of the newline 
    thisRec = thisRec.rstrip('\n') 
    # Format EG; 2015-08-31-21.43.47.986782 
    myMatch = re.search(r'(?P<date>201\d-\d{2}-\d{2}-\d{2}.\d{2}.\d{2}.\d{6})(?P<msg2>.*)', \ 
     thisRec) 

    if myMatch: 
     if md: 
      # A date has been found, so terminate the data 
      theData = md['msg2'] 
      # and start again with a new date 
      newDate = md['date'] 

      # print the data found 
      print theData 
      print '=================================' 
      print 'New date: ' + newDate 
     # end if 
     # and start collecting data again 
     md = myMatch.groupdict() 
    else: 
     # a date has not been found, append the data with a new line 
     if md: 
      md['msg2'] += '\n' + thisRec 
     # end if 
    # end if 

# next thisRec 
# print the last msg 
print md['msg2'] 
print '#####################END OF REPORT#################' 

fp.close() 

если вы читаете строку, которая не имеет дату на нем, накапливаются данные в мкр [ «»] msg2 словаря. Таким образом, в цикле вы можете прочитать системное время и проверить md ['date'] на него. Если он равен, вы можете сломать следующий раз, когда будет найдена дата. Что-то вроде:

import datetime.datetime as dt 
... 
mynow = dt.now() 
if md['date'] == mynow.strftime('%Y-%m-%d-%H.%M.%S.%f'): 
    break 
# end if 

Не уверен в формате strftime, но что-то в этом роде. В зависимости от того, хотите ли вы вести журнал до или после, вы должны поместить это в if myMatch: или иначе: