使用python os.path模块分离文件扩展名

18 投票
6 回答
21971 浏览
提问于 2025-04-16 17:14

我在用Python编程,想知道能不能用os.path.splitext()这个函数把文件名和扩展名分开,特别是当文件名里有多个“.”的时候,比如“foobar.aux.xml”。文件名可能有不同的形式,比如[foobar, foobar.xml, foobar.aux.xml]。有没有更好的方法呢?

6 个回答

2

根据这个函数的说明:

文件扩展名是从最后一个点开始到文件末尾的部分,前面的点会被忽略。

所以答案是否定的,你不能用这个函数来实现这个功能。

7

你可以试试这个:

names = pathname.split('.')
filename = names[0]
extensions = names[1:]

如果你想用splitext这个功能,可以试试下面这样的写法:

import os

path = 'filename.es.txt'

while True:
    path, ext = os.path.splitext(path)
    if not ext:
        print path
        break
    else:
        print ext

这样会产生:

.txt
.es
filename
33

使用 os.extsep 来分割。

>>> import os
>>> 'filename.ext1.ext2'.split(os.extsep)
['filename', 'ext1', 'ext2']

如果你想要获取第一个点后面的所有内容:

>>> 'filename.ext1.ext2'.split(os.extsep, 1)
['filename', 'ext1.ext2']

如果你的路径中有可能包含点的文件夹:

>>> def my_splitext(path):
...     """splitext for paths with directories that may contain dots."""
...     li = []
...     path_without_extensions = os.path.join(os.path.dirname(path), os.path.basename(path).split(os.extsep)[0])
...     extensions = os.path.basename(path).split(os.extsep)[1:]
...     li.append(path_without_extensions)
...     # li.append(extensions) if you want extensions in another list inside the list that is returned.
...     li.extend(extensions)
...     return li
... 
>>> my_splitext('/path.with/dots./filename.ext1.ext2')
['/path.with/dots./filename', 'ext1', 'ext2']

撰写回答