Python 读取日志文件时提取多行条目
我使用Python2.7.5从日志文件中读取警告并将其附加到列表中。然后使用此列表发送电子邮件 问题:代码生成的输出不包含多行错误消息。它只记录到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:
[
。但是,我需要记录整个错误,以便通过电子邮件发送。下面提到的是代码片段、日志文件、代码生成的输出以及预期的输出
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新手,如果您能分享代码片段,那就太好了!我没有这样的“片段”。我怀疑这不是一项琐碎的任务,仅几行代码无法处理。