Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文件末尾的Python正则表达式字符串值_Python_Regex - Fatal编程技术网

文件末尾的Python正则表达式字符串值

文件末尾的Python正则表达式字符串值,python,regex,Python,Regex,日志文件,我想在请求失败后读取最后几行: 日志文件记录了请求,其余部分是回溯,我只需要整个回溯和请求最后一个条目。我的请求中有“cookies”,所以我在regex中使用它来查找行,但我希望它只是最后一个条目,因为没有任何效果 日志文件条目: [22/Jul/2014:10:41:01.91] --- {'cookies': {'_sdsdsds': 'MzEzMzI1NDQ2OQ==', 'BBAUTHTOKEN': 'MPh5Kva9g3YqjSFx/VdnN757ImRldmljZV9pZ

日志文件,我想在请求失败后读取最后几行:

日志文件记录了请求,其余部分是回溯,我只需要整个回溯和请求最后一个条目。我的请求中有“cookies”,所以我在regex中使用它来查找行,但我希望它只是最后一个条目,因为没有任何效果

日志文件条目:

[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)

它仍然以相反的顺序给出列表,因此再次必须将其反转以获得正确的列表。例如,它的日志文件包含大量类似的条目,但希望仅从最后一个条目创建警报消息并进行回溯。