MST

星途 面试题库

面试题:Python文件操作结合if语句进行复杂逻辑的条件控制

有一个日志文件,记录了系统操作信息,每行格式为时间戳,操作类型,操作结果。操作类型有'login'、'logout'、'file_access'等,操作结果有'success'、'failure'。要求使用Python,通过if语句实现复杂逻辑:如果'login'操作连续失败超过3次,将从首次失败开始到最后一次失败的所有日志信息提取出来,写入一个新文件,并在控制台打印出首次失败的时间戳。请详细说明设计思路并编写代码。
30.8万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 逐行读取日志文件,解析每行数据,分离出时间戳、操作类型和操作结果。
  2. 使用一个列表来记录连续失败的登录操作日志。
  3. 遍历日志文件,当遇到登录失败操作时,将其添加到连续失败列表中;若遇到登录成功操作或其他操作类型,重置连续失败列表。
  4. 若连续失败列表长度超过3,将该列表中的日志信息写入新文件,并打印首次失败的时间戳。

代码实现

def process_log():
    consecutive_failures = []
    with open('original_log.log', 'r') as f:
        for line in f:
            timestamp, operation_type, operation_result = line.strip().split(',')
            if operation_type == 'login':
                if operation_result == 'failure':
                    consecutive_failures.append(line)
                else:
                    consecutive_failures = []
            else:
                consecutive_failures = []

            if len(consecutive_failures) > 3:
                with open('extracted_log.log', 'w') as new_f:
                    new_f.writelines(consecutive_failures)
                print(consecutive_failures[0].split(',')[0])
                break


if __name__ == "__main__":
    process_log()

请确保当前目录下存在名为 original_log.log 的日志文件,代码运行后会生成 extracted_log.log 文件并在控制台打印首次失败的时间戳。