猿问

从日志文件行创建字典及其键值

如果我在日志文件中有以下错误行,我正在尝试执行以下操作:

Aug  9 12:44:39 hostnameABC gnome-terminal-[12581]: Theme parsing error: gtk.css:6765:28: Missing opening bracket in color definition

我需要最终得到一个字典(python),它看起来像这样:

gnome-terminal-[1258] = {ERROR: 1}

如果范围内已经有这样的字典,则 ERROR += 1 。最后打印字典名称和Key Value。

这可能吗?


慕斯709654
浏览 115回答 3
3回答

白猪掌柜的

   error_pattern = r'ticky: ERROR ([\w\s\']*) \((.+)\)'    info_pattern = r'ticky: INFO.* \((.+)\)'    user_stat = {}        with open('syslog.log','r') as logs:      for line in logs.readlines():        if re.search(error_pattern,line):          results = re.search(error_pattern, line)          user_stat.setdefault(results.group(2),[0,0])[1]+=1        if re.search(info_pattern,line):          results = re.search(info_pattern, line)          user_stat.setdefault(results.group(1),[0,0])[0]+=1        user_sorted = sorted(user_stat.items())    with open('user_statistics.csv','w') as output:  csvfiler = csv.writer(output)  csvfiler.writerow(['Username','INFO','ERROR'])  for item in user_sorted:      onerow = [item[0],item[1][0],item[1][1]]      csvfiler.writerow(onerow)

狐的传说

尝试这个:import re# As I don't have access to the original file, you can# uncomment the code below to get the lines from the file#with open('filename.txt') as file:#     lines = file.readlines()# Now, assuming  these are the lines from the log filelines = ['Aug 9 12:44:39 hostnameABC gnome-terminal-[12581]: Theme parsing error: gtk.css:6765:28: Missing opening bracket in color definition','Aug 9 12:44:39 hostnameABC gnome-terminal-[12581]: Theme parsing error: gtk.css:6765:28: Missing opening bracket in color definition','Aug 9 12:44:39 hostnameABC gnome-terminal-[1581]: Theme parsing error: gtk.css:6765:28: Missing opening bracket in color definition']er_regex = re.compile(r'gnome-terminal-\[\d+\]')def er_count():   count = {}   er_ins = er_regex.findall(' '.join(lines))   for er in er_ins:       count.setdefault(er, 0)       count[er] += 1   return(count)print(er_count())您会得到一本字典,其中包含每个错误的计数:)

ABOUTYOU

您不能在变量名称中使用连字符和方括号。您可以通过使用更高级别的字典来解决这个问题,这样带有连字符和方括号的名称就是该字典中的键。您的解决方案可能如下所示:import relog = '''Aug  9 12:44:39 hostnameABC gnome-terminal-[12581]: Theme parsing error: gtk.css:6765:28: Missing opening bracket in color definitionAug  9 12:44:39 hostnameABC gnome-terminal-[12581]: Theme parsing error: gtk.css:6765:28: Missing opening bracket in color definitionAug  9 12:44:39 hostnameABC gnome-terminal-[12581]: Info only'''data = {}matches = re.findall(r'(gnome-terminal-\[\d+\])(?=.*error)', log)for match in matches:  data[match] = data.setdefault(match, {'ERROR': 0})  data[match]['ERROR'] += 1print(data)# {'gnome-terminal-[12581]': {'ERROR': 2}}如果您避免在名称中使用无效字符,您可以使用与上述相同的方法,并且只需要省略顶级字典即可。
随时随地看视频慕课网APP

相关分类

Python
我要回答