是否有从文件名中提取扩展名的功能?


当前回答

3.4版新增。

import pathlib

print(pathlib.Path('yourPath.example').suffix) # '.example'
print(pathlib.Path("hello/foo.bar.tar.gz").suffixes) # ['.bar', '.tar', '.gz']

我很惊讶还没有人提到pathlib,pathlib太棒了!

其他回答

这是一种直接的字符串表示技术:我看到提到了很多解决方案,但我认为大多数都在考虑拆分。然而,每次出现“.”时,Split都会执行此操作。您更希望查找的是分区。

string = "folder/to_path/filename.ext"
extension = string.rpartition(".")[-1]

使用splitext时,具有双扩展名的文件存在问题(例如file.tar.gz、file.tar.bz2等)

>>> fileName, fileExtension = os.path.splitext('/path/to/somefile.tar.gz')
>>> fileExtension 
'.gz'

但应该是:.tar.gz

可能的解决方案如下

对于简单的用例,一个选项可能是从点拆分:

>>> filename = "example.jpeg"
>>> filename.split(".")[-1]
'jpeg'

文件没有扩展名时没有错误:

>>> "filename".split(".")[-1]
'filename'

但你必须小心:

>>> "png".split(".")[-1]
'png'    # But file doesn't have an extension

也不会在Unix系统中处理隐藏文件:

>>> ".bashrc".split(".")[-1]
'bashrc'    # But this is not an extension

对于一般用途,首选os.path.splitext

最简单的获取方法是使用mimtypes,下面是示例:

import mimetypes

mt = mimetypes.guess_type("file name")
file_extension =  mt[0]
print(file_extension)
import os.path
extension = os.path.splitext(filename)[1]