Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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_Python 2.7 - Fatal编程技术网

Python 读取日志文件时提取多行条目

Python 读取日志文件时提取多行条目,python,python-2.7,Python,Python 2.7,我使用Python2.7.5从日志文件中读取警告并将其附加到列表中。然后使用此列表发送电子邮件 问题:代码生成的输出不包含多行错误消息。它只记录到[。但是,我需要记录整个错误,以便通过电子邮件发送。下面提到的是代码片段、日志文件、代码生成的输出以及预期的输出 Python代码: import arcpy, os recLogPath = "D:/something/log.txt" conflictMsgList = [] with open(recLogPath) as logFile:

我使用Python2.7.5从日志文件中读取警告并将其附加到列表中。然后使用此列表发送电子邮件

问题:代码生成的输出不包含多行错误消息。它只记录到
[
。但是,我需要记录整个错误,以便通过电子邮件发送。下面提到的是代码片段、日志文件、代码生成的输出以及预期的输出

Python代码:

import arcpy, os
recLogPath = "D:/something/log.txt"

conflictMsgList = []

with open(recLogPath) as logFile:
  for line in logFile:
    if "Warning:" in line:
        print(line)


print(conflictMsgList)
日志文件格式:

import arcpy, os
recLogPath = "D:/something/log.txt"

conflictMsgList = []

with open(recLogPath) as logFile:
  for line in logFile:
    if "Warning:" in line:
        print(line)


print(conflictMsgList)
[06/05/2020 15:15:33]对账版本“SD\EL”。Elliot_Menzies与sde.DEFAULT。
[06/05/2020 15:15:40]警告:在协调版本“SD\EL”时发现冲突。E_M。
[06/05/2020 15:15:40]9个版本中的3个已完成。
[06/05/2020 15:15:40]对账版本“SD\ME”.K_M与sde.DEFAULT。
[06/05/2020 15:16:16]警告:协调版本“SD\ME”时出错。K\M[
与边元素对应的几何图形长度不能为零。[class=srw.srw.ww_管道,oid=23]
字段不可编辑。
锁请求与已建立的锁冲突[锁请求与已建立的锁冲突][
SR]]
生成的输出:

import arcpy, os
recLogPath = "D:/something/log.txt"

conflictMsgList = []

with open(recLogPath) as logFile:
  for line in logFile:
    if "Warning:" in line:
        print(line)


print(conflictMsgList)
[06/05/2020 13:36:36]警告:在协调版本“SD\EL”时发现冲突。
[06/05/2020 13:36:54]警告:核对版本“SD\ME”时出错。K\u M[
我需要的预期输出:

import arcpy, os
recLogPath = "D:/something/log.txt"

conflictMsgList = []

with open(recLogPath) as logFile:
  for line in logFile:
    if "Warning:" in line:
        print(line)


print(conflictMsgList)
[06/05/2020 13:36:36]警告:在协调版本“SD\EL”时发现冲突。
[06/05/2020 15:16:16]警告:协调版本“SD\ME”时出错。K\M[
与边元素对应的几何图形长度不能为零。[class=srw.srw.ww_管道,oid=23]
字段不可编辑。
锁请求与已建立的锁冲突[锁请求与已建立的锁冲突][
SR]]

它假定“内部日志”行不是以“[”开头的换行符

def get_logs(logfilename):
    with open(logfilename) as logFile:
        loglines = logFile.readlines()

    logs = []
    for line in loglines:
        if line.startswith('['):
            logs.append(line)
        else:
            logs[-1] += line
    return logs

logs = get_logs(recLogPath)
for log in logs:
    if 'Warning:' in log:
        print(log)

您需要一个解析器,以便跟踪打开的
[]
块的数量。@mkrieger1我是Python新手,如果您能分享代码片段,那就太好了!我没有这样的“片段”。我怀疑这不是一项琐碎的任务,仅几行代码无法处理。