遇到一些需求,将某个文件中的时间进行相加减的操作,这里用到的是 from dateutil.parser import parse,可以将字符串形式的时间,进行相加减,如下:
import sys
import re
from dateutil.parser import parse
import pandas as pd
#cmp=com.transsion.camera/com.android.camera.CameraLauncher 行开始时间
#previewStarted START 行结束时间
#a = parse('2019-10-30 23:43:10.123')
#fileName = r'D:\log\log.txt'
class time_treatment():
def __init__(self):
self.gapTime()
def parameterRE(self, pattern, line):
rule = re.compile(pattern)
result = rule.search(line)
if result:
return result.groups()
else:
return None
def gapTime(self):
file = sys.argv[1]
df_file = []
with open(file,'rb') as read_line:
for line in read_line:
df_file.append(str(line))
#df_file.append(line.rstrip()) #去掉换行
dict = {}
gapTime = []
time = []
tag = []
start_time = None
end_time = None
for line in df_file:
start = 'cmp=com.transsion.camera/com.android.camera.CameraLauncher'
end = 'previewStarted START'
if start in line:
tag.append(start)
re = self.parameterRE(r'(\d+-\d+ \d+:\d+:\d+\.\d+).*', line)
time.append(re[0])
start_time=parse(re[0])
gapTime.append('')
elif end in line:
tag.append(end)
re = self.parameterRE(r'(\d+-\d+ \d+:\d+:\d+\.\d+).*', line)
time.append(re[0])
end_time = parse(re[0])
if start_time:
if end_time:
gap = str(end_time-start_time)
gapTime.append(gap)
for i in gapTime:
if i.find(',') >0:
gapTime.remove(i)
dict = {'Time':time, 'Tag':tag, 'GapTime':gapTime}
self.df_time = pd.DataFrame.from_dict(dict)
#print(self.df_time)
self.df_time.to_excel('./gapTime.xlsx')
if self.df_time:
print('-------------Done-------------')
else:
print('-------------不存在要解析的信息-------------')
if __name__ == "__main__":
df = time_treatment()
重点是用parse将字符串格式转换为时间格式,然后做加减处理。
其中关于结束点的时间减去开始的时间,算法还是有点问题的,会多出来一个计算,暂时留着这个bug