大家好,今天来分享我 Python 第三次作业的两个核心任务:用递归实现文件系统遍历,以及用加密模块和文件模拟实现用户登录系统。在完成过程中,我还踩了一个典型的 “目录名称无效” 的坑,顺便把排错过程也分享出来~


一、任务一:递归遍历路径下所有文件与文件夹

需求说明

给定一个路径,遍历该路径下所有文件和文件夹,遇到文件直接打印完整路径,遇到文件夹则递归进入继续遍历,最终输出所有文件的路径。

初始实现与报错

最开始我直接把单个文件路径传给了函数,结果程序直接抛出了 NotADirectoryError 错误,报错信息是:

原因很简单:os.listdir() 只能接收文件夹路径,而我传入的 beacon_report.log 是一个文件,程序无法对文件执行 “列出目录内容” 的操作。

修正后的完整代码及运行结果

核心知识点解析

  1. os.listdir(path):列出指定路径下的所有文件和文件夹名称,但不包含完整路径。
  2. os.path.join(path, item):安全拼接路径,自动适配不同系统的路径分隔符(Windows 用\,Linux 用/)。
  3. os.path.isdir(path) / os.path.isfile(path):判断路径是文件夹还是文件,是实现递归的关键。
  4. 递归逻辑:遇到文件夹时,函数会调用自身,以子文件夹路径为参数继续遍历,直到所有层级的文件都被打印。

二、任务二:加密登录系统

需求说明

使用 Python 的加密模块(hashlib)对用户密码进行加密,用文本文件模拟数据库存储用户信息,实现注册和登录功能,不存储明文密码。

完整实现代码

核心知识点解析

  1. 密码加密:使用hashlib.md5()对密码进行哈希处理,将明文密码转换为不可逆的十六进制字符串,文件中只存储加密后的密码,保障用户信息安全。
  2. 文件操作
    • 注册时以"a"(追加)模式打开文件,新用户信息不会覆盖旧数据。
    • 登录时以"r"(只读)模式读取文件,逐行比对用户名和加密密码。
  3. 异常处理:捕获FileNotFoundError,当用户还未注册时给出友好提示,避免程序崩溃。

三、作业总结与反思

  1. 递归遍历的关键细节

    • 必须先判断路径是否存在、是否为文件夹,再执行os.listdir(),避免直接传入文件路径导致报错。
    • 递归的终止条件是 “遇到文件时打印并返回”,否则会无限递归。
  2. 登录系统的安全优化点

    • 目前使用 MD5 加密,实际项目中建议使用更安全的bcrypthashlib.pbkdf2_hmac算法,并加入盐值(salt)防止彩虹表破解。
    • 可以增加用户名重复校验、密码强度验证等功能,提升系统健壮性。

这两个任务让我对 Python 的文件操作、递归思想和加密模块有了更直观的理解,尤其是排错的过程,也让我意识到了路径类型判断的重要性。后续可以尝试把两个功能结合起来,实现一个 “文件管理系统 + 用户登录” 的小项目,进一步巩固所学知识~

更多推荐