如何简洁地检查文件名后缀是否匹配多个选项?
简化文件后缀判断的几种方法
方法1:利用str.endswith()支持元组参数的特性(最优解)
Python的str.endswith()方法本身就支持传入字符串元组,用来匹配多个后缀。同时可以将文件名转为小写,避免重复写大小写两种后缀:
# 定义所有图片后缀的小写集合 image_extensions = ('.jpg', '.jpeg', '.heic', '.png', '.avif') # 转小写后判断是否匹配任意后缀 if file.name.lower().endswith(image_extensions): # 执行分类逻辑 pass
这个方法最简洁高效,因为endswith是Python内置的优化方法,性能比手动用any()遍历更好。
方法2:保留大小写后缀的元组写法
如果不想转换文件名大小写,也可以把所有大小写后缀放进元组直接传入:
image_extensions = ('.jpg', '.JPG', '.jpeg', '.JPEG', '.heic', '.HEIC', '.png', '.PNG', '.avif', '.AVIF') if file.name.endswith(image_extensions): # 执行分类逻辑 pass
方法3:用any()生成器表达式(备选方案)
你之前尝试的any()其实也可以实现,只需要调整写法——让生成器里的每个元素都是file.name.endswith(ext)的布尔值,any()会遍历判断是否有任意一个为True:
image_extensions = ['.jpg', '.jpeg', '.heic', '.png', '.avif'] if any(file.name.lower().endswith(ext) for ext in image_extensions): # 执行分类逻辑 pass
不过这个方法的性能略逊于直接用endswith()的元组参数,因为需要手动遍历每个后缀。
内容的提问来源于stack exchange,提问作者baby
相关产品推荐
相关产品推荐

