题解 | #简单错误记录#
简单错误记录
https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb
import sys # 错误记录类 class ErrorLog(): def __init__(self): # 初始化一个日志id计数字典 self.logs_id = {} # 一个日志信息的列表 self.logs = [] # 最大条数 self.max_length = 8 # 文件名截取长度 self.str_limit = 16 # 日志计数 self.count = 0 # 记录日志方法 def record(self, log): filename , line = self.log_format(log) self.count += 1 log_id = filename + line # 检查是否重复 if not self.log_repeat_check(log_id): if len(self.logs) >= self.max_length: self.logs.pop(0) self.logs.append({ 'file':filename, 'line':line }) self.logs_id[log_id] = 1 else: self.logs_id[log_id] += 1 # 辅助方法,日志格式化 def log_format(self, log): # 空格拆分 filepath,line = log.split() # 考查切片 [-16:] 第一个参数负值,表示从后往前,取最后16个 filename = filepath.split('\\')[-1][-self.str_limit:] return filename,line # 辅助方法,检查重复 def log_repeat_check(self, log_id): return log_id in list(self.logs_id) # 打印日志 def get_current_logs(self): for item in self.logs: print(' '.join([item['file'], item['line'], str(self.logs_id[item['file']+item['line']])])) logger = ErrorLog() for item in sys.stdin: logger.record(item.strip()) logger.get_current_logs()