如何简化遍历多层文件夹检测Excel文件null值的Python代码
Excel多层目录空值批量检测简化代码
原代码问题梳理
- 仅支持遍历两层子目录,深层子文件夹下的Excel文件会漏检
- 相同逻辑重复编写,代码冗余度高
- 路径拼接用硬编码反斜杠,不支持跨系统运行,还存在变量引用错误(深层文件输出时路径变量错用上层变量)
- logging配置重复放在循环内,属于无效重复调用
- 存在无用导入(拼写错误的
uuidtre、未使用的numpy库)
简化后可直接运行的代码
import pandas as pd import logging from pathlib import Path # 日志配置仅执行一次 logging.basicConfig(filename='nanTest.log', level=logging.INFO, format='%(message)s') # 检测根目录配置 ROOT_PATH = r"C:\Users\Documents\python\Emp" def check_excel_null(excel_path: Path): """检测单个Excel文件空值并写入日志""" try: df = pd.read_excel(excel_path, engine='openpyxl') except Exception as e: logging.info(f"文件名: {excel_path.name}, 文件路径: {excel_path.absolute()}, 读取失败:{str(e)}") return nan_count = df.isnull().sum().sum() tip = "文件中无空值" if nan_count == 0 else f"文件中检测到{nan_count}个空值" logging.info(f"文件名: {excel_path.name}, 文件路径: {excel_path.absolute()}, {tip}") if __name__ == '__main__': # 递归遍历所有层级目录下的xlsx文件 for excel_file in Path(ROOT_PATH).rglob("*.xlsx"): check_excel_null(excel_file)
优化说明
- 用
pathlib库的rglob方法递归遍历所有层级子目录,不管嵌套多少层都能完整匹配所有xlsx文件,无需手动编写多层循环逻辑 - 把重复的Excel读取、空值检测、日志输出逻辑封装为独立函数,代码可维护性大幅提升
- 新增异常捕获逻辑,遇到损坏、加密的Excel文件不会直接中断整个检测流程,会自动记录失败原因
- 修正原代码的所有bug,路径适配Windows/macOS/Linux系统,日志输出内容清晰准确
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

