如何修正Python中判断文件名后缀的if语句 匹配config合法文件格式
原代码核心问题
str.find()方法的返回值逻辑错误:匹配成功返回对应下标,未匹配返回-1,直接作为if判断条件时,匹配到下标为0的场景会被判定为False,完全不符合预期- 若
valid_filename是csv、txt组成的合法格式列表,不能直接用字符串查找方法做匹配 - 手动截取文件名最后三位的方式容错性极差,遇到文件名长度不足3位、后缀大小写不统一的场景会直接失效
- 合法格式配置的读取放在循环内,会重复执行读取逻辑,无意义消耗性能
修正后代码
import os import csv def load_file(): # 配置读取移到循环外,避免重复读取 valid_suffixes = [s.lower() for s in config['valid_files']['valid']] folder_path = config['files']['folder_path'] try: for fileName in os.listdir(folder_path): # 用标准库方法提取后缀,自动处理点号、大小写问题 suffix = os.path.splitext(fileName)[-1].lower().lstrip('.') if suffix in valid_suffixes: file_path = os.path.join(folder_path, fileName) with open(file_path, "r") as csv_file: csvReader = csv.reader(csv_file, delimiter=',') first_row = True # 后续业务逻辑自行补充 else: # 此处替换为发送失败通知的逻辑即可 print(f"文件{fileName}格式不合法,跳过处理") except Exception as e: # 补充自定义异常处理逻辑 print(f"加载文件出错:{str(e)}")
逻辑说明
- 用
os.path.splitext提取文件后缀是Python官方推荐的标准写法,自动适配不同长度的后缀,不会出现手动截取的边界错误 - 统一将后缀转小写,避免
.CSV/.TXT这类大写后缀无法识别的问题 - 直接用
in关键字判断后缀是否在合法列表中,逻辑简单清晰不会出现判断错误 - 提前把合法后缀列表统一转小写,避免循环内重复处理,提升执行效率
- 如果你确实需要严格截取文件名最后三位做匹配,可以将
suffix = os.path.splitext(fileName)[-1].lower().lstrip('.')替换为suffix = fileName[-3:].lower(),但该方式容易出现边界错误,更推荐用标准库方法提取后缀
内容的提问来源于stack exchange,提问作者user16394167
相关产品推荐
相关产品推荐

