【发布时间】:2017-06-12 10:18:50
【问题描述】:
我正在尝试制作一个从日志文件输出特定时间范围的 python 脚本(类似于下面列出的 sed 命令):
sed -n '/2017-01-26 18:00/ , /2017-01-26 18:02/p' /logfile.log
2017-01-26 18:00:00
2017-01-26 18:01:01
2017-01-26 18:01:02
2017-01-26 18:01:09
2017-01-26 18:01:09
2017-01-26 18:01:11
2017-01-26 18:02:01
我的 python 脚本正在搜索一个固定的字符串,而不像上面的 sed 命令(我怀疑我做错了什么,但我找不到错误 - 请检查下面的代码):
请指出应该更改代码的位置,并建议代码增强。谢谢!
#!/usr/bin/python
import datetime, time, os, sys, re
from datetime import timedelta
counter = 0
avgtime = 0
now = datetime.datetime.utcnow()
pasttime = now - datetime.timedelta(minutes=5)
timestamp = now.strftime("%y%m%d")
fiveago = now - timedelta(minutes=5,seconds=now.second)
current = now.strftime("%Y-%m-%d %H:%M")
pasttime = fiveago.strftime("%Y-%m-%d %H:%M")
pattern = str(current + "|" + pasttime)
f = open('/logs/' + sys.argv[1] + '/' + 'u_ex' + timestamp + '.log', 'r')
for line in f:
if "POST" in line:
if re.search(pattern, line, re.IGNORECASE):
date = line.split(' ')[1]
time = line.split(' ')[14]
avgtime += int(time)
counter += 1
print(date,time)
f.close()
print(pattern)
print("Total amount of time: ",counter)
print("Total scan time: ",avgtime)
print("Average scan time: ",avgtime / counter)
【问题讨论】:
-
sed命令其实是这样的:sed -n '/2017-01-26 18:00/ , /2017-01-26 18:02/p' /logfile.log
-
代码应该做什么?您的 sed 命令似乎只显示时间范围内的行,但您的 python 代码确实计算了一些平均值?
-
是的,它得到了 SQL 事务中所用时间的算术平均值......但我现在遇到的问题是让正则表达式以与 sed 命令相同的方式工作
-
您的问题到底是什么?您似乎对这里编写的代码不满意,但您还没有解释您需要帮助的地方。 How to Ask
-
@HåkenLid 他在 cmets 中解释过,我现在得到了问题并正在研究解决方案