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


当前回答

试试看:

files = ['file.jpeg','file.tar.gz','file.png','file.foo.bar','file.etc']
pen_ext = ['foo', 'tar', 'bar', 'etc']

for file in files: #1
    if (file.split(".")[-2] in pen_ext): #2
        ext =  file.split(".")[-2]+"."+file.split(".")[-1]#3
    else:
        ext = file.split(".")[-1] #4
    print (ext) #5

获取列表中的所有文件名拆分文件名并检查倒数第二个扩展名,它是否在penext列表中?如果是,则使用最后一个扩展名连接它,并将其设置为文件的扩展名如果没有,则只将最后一个扩展名作为文件的扩展名然后检查一下

其他回答

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

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

但应该是:.tar.gz

可能的解决方案如下

只需加入所有pathlib后缀。

>>> x = 'file/path/archive.tar.gz'
>>> y = 'file/path/text.txt'
>>> ''.join(pathlib.Path(x).suffixes)
'.tar.gz'
>>> ''.join(pathlib.Path(y).suffixes)
'.txt'
import os.path
extension = os.path.splitext(filename)[1][1:]

只获取扩展名的文本,而不获取点。

令人惊讶的是,这还没有被提及:

import os
fn = '/some/path/a.tar.gz'

basename = os.path.basename(fn)  # os independent
Out[] a.tar.gz

base = basename.split('.')[0]
Out[] a

ext = '.'.join(basename.split('.')[1:])   # <-- main part

# if you want a leading '.', and if no result `None`:
ext = '.' + ext if ext else None
Out[] .tar.gz

优点:

对我能想到的任何事情都能如愿以偿无模块无正则表达式跨平台易于扩展(例如,没有用于扩展的前导点,只有扩展的最后部分)

作为函数:

def get_extension(filename):
    basename = os.path.basename(filename)  # os independent
    ext = '.'.join(basename.split('.')[1:])
    return '.' + ext if ext else None
name_only=file_name[:filename.index(".")

这将为您提供文件名,最多为第一个“.”,这将是最常见的。