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

时间:2011-05-08 20:11:11

标签: python

我正在使用os.path.splitext()在python中工作,并且好奇是否可以将文件名与多个“。”的扩展名分开?例如“foobar.aux.xml”使用splitext。文件名不同于[foobar,foobar.xml,foobar.aux.xml]。有没有更好的办法?

5 个答案:

答案 0 :(得分:24)

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']

答案 1 :(得分:5)

你可以试试:

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

答案 2 :(得分:2)

在函数的帮助下:

  

扩展就是最后一点   点到最后,忽略了领先的点。

所以答案是否定的,你不能用这个功能来做。

答案 3 :(得分:1)

如果你想在最后拆分任意数量的扩展,你可以创建一个这样的函数:

def splitext_recurse(p):
    base, ext = os.path.splitext(p)
    if ext == '':
        return (base,)
    else:
        return splitext_recurse(base) + (ext,)

并像这样使用它:

>>> splitext_recurse("foobar.aux.xml")
('foobar', '.aux', '.xml')

答案 4 :(得分:0)

import os
#Returns the file extension or empty string if none is found.
#The actual extension is the string after the last dot (if multiple).
def get_extension(filename):
    result = ""
    if "." in filename:
        result = os.path.splitext(filename)[-1]

    return result