目的:在log文件中添加了时间戳,在得到的.csv文件中有时间戳和IPS,然后根据log里的时间戳得到相应的IPS添加到log中。
log里的格式:TimeStamp |2015-10-29 17:56:42|2015-10-29 17:56:57|2015-10-29 17:57:12|
.csv的格式:
IPC | IPS(Million) | CPU_Util(%) | TimeStamp
0.00|0.0|0.10|2015-10-29 16:52:37
0.00|0.0|0.02|2015-10-29 16:52:38
0.00|0.0|0.11|2015-10-29 16:52:39
作为一个python小白,一切从google和百度开始....
思路:逐条读取log文件里的时间戳,每个时间戳再去遍历.cvs找到相同(或相近)的字段的IPS
step1:文件的打开;
f= open("filename") //不带参数默认是r,读文件
f= open("filename",'w') //写文件
f= open("filename".'a') //追加模式,打开后定位到文件尾
以上记得要关闭文件f.close()
step2:获取log里的时间
for line in flog: #按行读取
datas = line.split('|') #按'|'分割
if datas[0] == "TimeStamp " :
step3:找到对应的.csv的时间
这里有几个小问题:1)可能没有匹配的时间,我修改为找到log里大于等于data[i]时间的第一条时间
2)所以要把字符串匹配改为时间比较,调用time库函数date2=time.strptime(datas[i],"%Y-%m-%d %H:%M:%S"),然后就可以比较啦
3)在log文件里查找的时候只执行一次,原因:文件指针需要重新修改,添加f.seek(0,0) f.seek(偏移量,[起始位置])
step4:把相应的IPS,放到字符串或者临时文件里,最后加到log里面就好了
完整代码:
import time
flog = open("data-30-02-57-56.log")
fips = open("ipc_ips_cpu_ts.csv")
ftmp = open("ftmp",'w')
ftmp.write("IPS | ")
str = "IPS | "
for line in flog:
datas = line.split('|')
if datas[0] == "TimeStamp " :
break;
n=1
for i in range(1,len(datas)-1):
print datas[i]
fips.seek(0,0)
for line2 in fips.readlines()[n:len(fips.readlines())-1]:
data2=line2.split('|')
n=n+1
date1=time.strptime(data2[3][0:19],"%Y-%m-%d %H:%M:%S")
date2=time.strptime(datas[i],"%Y-%m-%d %H:%M:%S")
if date1 >= date2:
print data2[1]
str = str + data2[1]+" | "
ftmp.write(data2[1]+" | ")
break
#print str
flog.close()
fips.close()
ftmp.close()
flog = open("data-30-02-57-56.log",'a')
ftmp = open("ftmp")
for line in ftmp:
flog.write(line)
flog.close()
ftmp.close()