在python中根据名称和扩展名拆分文件名

在python中根据名称和扩展名拆分文件名,python,python-3.x,Python,Python 3.x,我有这样的模式: dir1/dir2/.log.gz dir1/dir2/a.log.gz dir1/dir2/a.py dir1/dir2/*.gzip.tar 我想获取文件名、路径和扩展名。e、 g: (name,extension)=(dir1/dir2/,.log.gz) (name,extension)=(dir1/dir2/a,.log.gz) (name,extension)=(dir1/dir2/a,.py) (name,extension)=(dir1/dir2/,.gzip

我有这样的模式:

dir1/dir2/.log.gz
dir1/dir2/a.log.gz
dir1/dir2/a.py
dir1/dir2/*.gzip.tar
我想获取文件名、路径和扩展名。e、 g:

(name,extension)=(dir1/dir2/,.log.gz)
(name,extension)=(dir1/dir2/a,.log.gz)
(name,extension)=(dir1/dir2/a,.py)
(name,extension)=(dir1/dir2/,.gzip.tar)
我尝试:

re.findall(r'(.*).*\.?(.*)',path)

但它并不完美

一般策略:找到第一个“.”在它之前的一切都是路径,在它之后的一切都是延伸

def get_path_and_extension(filename):
    index = filename.find('.')
    return filename[:index], filename[index + 1:]

如果只需要文件名和扩展名:

import os
# path = C:/Users/Me/some_file.tar.gz
temp = os.path.splitext(path)
var = (os.path.basename(temp[0]), temp[1])
print (var)
# (some_file.tar, .gz)
值得注意的是,如果需要,具有“双”扩展名的文件将需要递归。例如,
.tar.gz
是一个gzip文件,恰好也是一个存档文件。但它的当前状态是
.gz


有关此主题的详细信息,请参见。

如果路径名的一部分中有“.”,请参见@cᴏʟᴅsᴘᴇᴇᴅ 我不认为它是完全重复的,因为这个问题想要从名称中分离所有扩展,例如,
.log.gz
,而不仅仅是最后一个。