Python查找目录匹配模式文件、未找到时发邮件的问题咨询
问题根源
os.path.isfile()本身不支持*通配符匹配逻辑,你直接拼接得到的路径是/dev/stage/test*,系统中不存在名称带*的对应文件,所以判断始终返回False- 现有代码缺少
json模块导入,后续调用json.load会直接报错 - 直接拼接路径的写法兼容性差,不同操作系统的路径分隔符规则不同,容易出现路径错误
正确实现方案
使用Python标准库的glob模块实现通配符匹配,这是专门用于文件路径模式匹配的工具,原生支持*、?等通配符语法。
import os import json import glob path = '/dev/stage/' file_pattern = 'test*' # 拼接匹配规则,优先用os.path.join避免路径分隔符错误 match_rule = os.path.join(path, file_pattern) # 查找所有符合规则的文件,返回匹配到的路径列表 matched_files = glob.glob(match_rule) # 过滤出真实存在的普通文件(避免匹配到目录) valid_files = [f for f in matched_files if os.path.isfile(f)] if valid_files: # 取第一个匹配到的文件,如需处理多个可遍历valid_files target_file = valid_files[0] # 建议指定编码避免乱码,增加异常捕获处理非法JSON的情况 try: with open(target_file, encoding='utf-8') as f: data = json.load(f) except json.JSONDecodeError: # 可自定义JSON格式错误的处理逻辑,比如发告警邮件 pass else: # 确保mailserver、msg已提前正确初始化 mailserver.sendmail('abc@gmail.com','def@gmail.com',msg.as_string())
额外注意事项
- 如果同一目录下可能存在多个符合规则的文件,可根据修改时间、文件名规则进一步筛选需要的目标文件
- 建议补充文件读取、JSON解析的异常捕获逻辑,避免文件权限不足、JSON格式非法等异常导致程序直接崩溃
- 邮件发送部分需要提前完成SMTP服务连接、邮件内容组装的初始化,否则执行到sendmail步骤会报错
- 如果需要递归匹配子目录下的符合规则文件,可以使用
glob.glob(match_rule, recursive=True),同时匹配规则需要对应添加**标识子目录层级
内容的提问来源于stack exchange,提问作者vvazza
相关产品推荐
相关产品推荐

