gpt4 book ai didi

python - 尝试解析日志文件并使用 python 中的表创建 CVS 报告。由于某种原因,代码返回空表

转载 作者:行者123 更新时间:2023-12-04 14:09:03 25 4
gpt4 key购买 nike

作业:
想象一下,您的公司使用一台运行名为 ticky 的服务的服务器,这是一种内部票务系统。该服务在成功运行和遇到错误时都会将事件记录到系统日志中。该服务的开发人员需要您帮助从这些日志中获取一些信息,以便他们可以更好地了解他们的软件是如何使用的以及如何改进它。因此,对于本实验,您将编写一些自动化脚本来处理系统日志并根据从日志文件中提取的信息生成报告。

你会做什么使用正则表达式解析日志文件在字典中追加和修改值以 CSV 格式写入文件将文件移动到适当的目录以便与 CSV->HTML 转换器一起使用

此外,这里是日志文件中的示例:

Jan 31 16:35:46 ubuntu.local ticky: ERROR Timeout while retrieving information (oren)
Jan 31 16:53:54 ubuntu.local ticky: INFO Commented on ticket [#3813] (mcintosh)
Jan 31 16:54:18 ubuntu.local ticky: ERROR Connection to DB failed (bpacheco)
Jan 31 17:15:47 ubuntu.local ticky: ERROR The ticket was modified while updating (mcintosh)
Jan 31 17:29:11 ubuntu.local ticky: ERROR Connection to DB failed (oren)
Jan 31 17:51:52 ubuntu.local ticky: INFO Closed ticket [#8604] (mcintosh)

这是我的代码,它返回空表:

 #!/usr/bin/env python3

import sys
import re
import csv
import operator

errors = {} #number of diff error messages
per_user = {}

errors_report = 'error_report.csv'
per_user_report = 'per_user_report.csv'

logfile='syslog.log'

error_pattern = r'\w* [\d]* [\d?:]*[\w?' '|.]*: [ERROR]*: (?P<message>[\w+' ']*)\[\#\d+\] \((?P<username>\w+)\)'
info_pattern = r'\w* [\d]* [\d?:]*[\w?' '|.]*: [INFO]*: [\w+' ']*\[\#\d+\] \((?P<username>\w+)\)'

with open(logfile, 'r') as file:
for line in file.readlines():
if re.search(error_pattern, line):
error_result = re.search(error_pattern, line)
errors.setdefault(error_result.group('message'),0)
errors[error_result.group('message')]+=1
per_user.setdefault(error_result.group('username'),[0,0])[1]+=1
if re.search(info_pattern, line):
info = re.search(info_pattern, line)
per_user.setdefault(info.group('username'),[0,0])[0]+=1

error_sorted=sorted(errors.items(), key=operator.itemgetter(1), reverse = True)
per_user_sorted=sorted(per_user.items())

with open('error_report.csv', 'w') as error_report:
writer = csv.writer(error_report)
writer.writerow(['Error', 'Count'])
writer.writerows(error_sorted)

with open('per_user_report.csv', 'w') as user_report:
writer = csv.writer(user_report)
writer.writerow(['Username', 'INFO', 'ERROR'])
for item in per_user_sorted:
onerow = [item[0],item[1][0],item[1][1]]
writer.writerow(onerow)

最佳答案

#!/usr/bin/env python3

import sys
import re
import csv
import operator

errors = {} # number of diff error messages
per_user = {}

errors_report = 'error_message.csv'
per_user_report = 'user_statistics.csv'

logfile = 'syslog.log'


pattern = r'(?P<messageType>INFO|ERROR):?\s*(?P<message>.*?)\((?P<username>\w+)\)$'

with open(logfile, 'r') as file:
for line in file.readlines():
regex_result = re.search(pattern, line)
if regex_result:
message_type = regex_result.group('messageType')
message = regex_result.group('message')
username = regex_result.group('username')
if message_type == 'ERROR':
errors.setdefault(message, 0)
errors[message] += 1
per_user.setdefault(username, [0, 0])[1] += 1
else:
per_user.setdefault(username, [0, 0])[0] += 1

error_sorted = sorted(errors.items(), key=operator.itemgetter(1), reverse=True)
per_user_sorted = sorted(per_user.items())

with open(errors_report, 'w', newline='') as error_report:
writer = csv.writer(error_report)
writer.writerow(['Error', 'Count'])
writer.writerows(error_sorted)

with open(per_user_report, 'w', newline='') as user_report:
writer = csv.writer(user_report)
writer.writerow(['Username', 'INFO', 'ERROR'])
for item in per_user_sorted:
onerow = [item[0], item[1][0], item[1][1]]
writer.writerow(onerow)

关于python - 尝试解析日志文件并使用 python 中的表创建 CVS 报告。由于某种原因,代码返回空表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66001781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com