我如何检查一个文件名后缀对很多选项简洁?



我试图写一个程序,本质上划分不同的文件类型在不同的目录。我的计算机确实有许多不同的图像文件类型,所以在我的代码中有很长的一行:

if file.name.endswith(".jpg") or 
file.name.endswith(".JPG") or 
file.name.endswith(".jpeg") or 
file.name.endswith(".JPEG") or 
file.name.endswith(".heic") or 
file.name.endswith(".HEIC") or 
file.name.endswith(".png") or 
file.name.endswith(".PNG") or 
file.name.endswith(".avif") or 
file.name.endswith(".AVIF"):

我尝试将所有文件类型字符串放入列表并使用any()函数,但问题是any()给出布尔输出,而file.name.endswith()函数需要str输入。

对于如何简化这一行有什么想法吗?

根据您对file.name的使用,我猜file可能是一个路径对象。如果是这样,除了name属性之外,它还有一个包含文件扩展名的suffix(和stem,它是文件名扩展名之前的一部分,可以用于其他事情)。一旦有了后缀,就可以将其小写并检查其在集合中的隶属关系(这比在列表中检查隶属关系更有效)。

if file.suffix.lower() in {'.jpg', '.jpeg', '.heic', '.png', '.avif'}:

os.path.splitext()可以将扩展名从文件名中分离出来,使用lower()可以避免单独处理不同大小写的变体:

valid_extensions = set(['.jpg', '.jpeg', '.heic', '.png', '.avif'])
def check_extension(filename):
return os.path.splitext(filename)[1].lower() in valid_extensions

>>> check_extension('good.JPEG')
True
>>> check_extension('bad.zip')
False

str.endswith()接受一个字符串元组,任何匹配的都是True。同时使用str.lower(),这样你就不需要分别检查大小写了。

if file.name.lower().endswith((".jpg", ".jpeg", ".heic", ".png", ".avif")):

相关内容

  • 没有找到相关文章

最新更新