文件末尾的Python正则表达式字符串值
日志文件,我想在请求失败后读取最后几行: 日志文件记录了请求,其余部分是回溯,我只需要整个回溯和请求最后一个条目。我的请求中有“cookies”,所以我在regex中使用它来查找行,但我希望它只是最后一个条目,因为没有任何效果 日志文件条目:文件末尾的Python正则表达式字符串值,python,regex,Python,Regex,日志文件,我想在请求失败后读取最后几行: 日志文件记录了请求,其余部分是回溯,我只需要整个回溯和请求最后一个条目。我的请求中有“cookies”,所以我在regex中使用它来查找行,但我希望它只是最后一个条目,因为没有任何效果 日志文件条目: [22/Jul/2014:10:41:01.91] --- {'cookies': {'_sdsdsds': 'MzEzMzI1NDQ2OQ==', 'BBAUTHTOKEN': 'MPh5Kva9g3YqjSFx/VdnN757ImRldmljZV9pZ
[22/Jul/2014:10:41:01.91] --- {'cookies': {'_sdsdsds': 'MzEzMzI1NDQ2OQ==', 'BBAUTHTOKEN': 'MPh5Kva9g3YqjSFx/VdnN757ImRldmljZV9pZCI6ICJiZTUxZDFlZTY0NmMyY2Q4IiwgImNoYWZmIjogInJ3ajdkTUFYamhGN3FnPT1cbiIsICJtaWQiOiA1NDMzMSwgInZpZ etc' }}
Traceback (most recent call last):
File "/admin.py", line 271, in some_method
OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')
other log entries
[22/Jul/2014:10:41:10.00] --- {'cookies': {'_sdsdsds': 'MzEzMzI1NDQ2OQ==', 'BBAUTHTOKEN': 'MPh5Kva9g3YqjSFx/VdnN757ImRldmljZV9pZCI6ICJiZTUxZDFlZTY0NmMyY2Q4IiwgImNoYWZmIjogInJ3ajdkTUFYamhGN3FnPT1cbiIsICJtaWQiOiA1NDMzMSwgInZpZ etc' }}
Traceback (most recent call last):
File "/admin.py", line 271, in some_method
OperationalError: (1205, 'Lock wait timeout exceeded; try restarting transaction')
代码:
f ='logfile'
for line in f.readlines():
match = re.search( 'cookies', line, re.M|re.I)
if match:
print match.group(), line
break
这里有两个问题:首先,您使用字符串“logfile”而不是打开文件;其次,您在尝试提取多行字符串时,逐行遍历文件 因此,首先请尝试:
with open('logfile', 'r') as f:
for line in f.readlines():
match = re.search('cookies', line, re.M|re.I)
if match:
print match.group(), line
break
以正确打开该文件
接下来,我们需要考虑一次提取多行。我们真正想做的是迭代日志文件条目,而不是for循环中的行。如何执行此操作取决于日志文件的语法(以及是否允许修改语法)。例如,如果日志条目由一个空行分隔,您可以执行以下操作:
def log_entries(f):
return f.read().split('\n\n')
def main():
with open('logfile', 'r') as f:
for log_entry in log_entries(f):
match = re.search('cookies', log_entry, re.M|re.I)
if match:
print(match.group(), log_entry)
break
这就是我所做的:
def find_last(FILE_PATH):
flag = 0
tmp_lines = []
f = open(FILE_PATH)
for line in reversed(f.readlines()):
if flag == 1:
tmp_lines.append(line)
match = re.search('cookies', line, re.M | re.I)
if match:
if flag:
return tmp_lines
flag = 1
tmp_lines.append(line)
它仍然以相反的顺序给出列表,因此再次必须将其反转以获得正确的列表。例如,它的日志文件包含大量类似的条目,但希望仅从最后一个条目创建警报消息并进行回溯。