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

split filename on name and extenstion in python

本问题已经有最佳答案,请猛点这里访问。

我有这样的模式:

1
2
3
4
dir1/dir2/.log.gz
dir1/dir2/a.log.gz
dir1/dir2/a.py
dir1/dir2/*.gzip.tar

我要获取文件名或路径和扩展名。例如:

1
2
3
4
(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)

我尝试:

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

但它不完美


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

1
2
3
4
5
6
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

关于这个话题还有更多的内容。


一般策略:找到第一个'。'前面的都是路径,后面的都是扩展。

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