У меня есть одна временная метка, например 2015-08-31-21.43.47.986782, и мне нужно получить все данные, полученные между этой меткой времени и текущей временной меткой системы. Как мне это сделать? Мне нужно идти на какое-то условие? Если да, просьба уточнитьКак получить данные между двумя временными отметками
0
A
ответ
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: или иначе:
Здесь информации недостаточно. Вы запрашиваете данные как продолжительность или дату начала и окончания? – Gusdor
Вам нужен запрос к базе данных? или что-то другое. – VIVEK
Мне нужно сделать это через скрипт оболочки. На самом деле у меня есть одна временная метка, до которой были записаны некоторые записи. Теперь мне нужно получить данные, взятые между этой меткой времени и текущей временной меткой системы. –