如何检查文件的扩展名?

301 投票
14 回答
550245 浏览
提问于 2025-04-16 17:03

我正在做一个程序,需要根据文件的扩展名来执行不同的操作。我可以直接这样做吗?

if m == *.mp3
   ...
elif m == *.flac
   ...

14 个回答

77

从Python 3.4开始,使用pathlib这个库。

from pathlib import Path
Path('my_file.mp3').suffix == '.mp3'

如果你在处理包含点(.)的文件夹时,可以使用

Path('your_folder.mp3').is_file() and Path('your_folder.mp3').suffix == '.mp3'

进行额外的检查,以确保一个以.mp3结尾的文件夹不会被误认为是一个mp3文件。

79

os.path 是一个提供了很多处理路径和文件名功能的工具。你可以在这里找到相关的文档:(docs)

os.path.splitext 这个函数可以把一个路径分开,提取出文件的扩展名,也就是文件名最后的那部分。

import os

filepaths = ["/folder/soundfile.mp3", "folder1/folder/soundfile.flac"]

for fp in filepaths:
    # Split the extension from the path and normalise it to lowercase.
    ext = os.path.splitext(fp)[-1].lower()

    # Now we can simply use == to check for equality, no need for wildcards.
    if ext == ".mp3":
        print fp, "is an mp3!"
    elif ext == ".flac":
        print fp, "is a flac file!"
    else:
        print fp, "is an unknown file format."

结果是:

/folder/soundfile.mp3 is an mp3!
folder1/folder/soundfile.flac is a flac file!
618

假设 m 是一个字符串,你可以使用 endswith 方法:

if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...

如果你想不区分大小写,并且想避免写很多的 else-if 语句,可以这样做:

m.lower().endswith(('.png', '.jpg', '.jpeg'))

撰写回答