如何正确获取文件扩展名?

Pag*_*vid 18 python

我知道这个问题在本网站上被多次询问.但是我发现他们错过了一个重要的观点:只考虑了一个周期的文件扩展名*.png *.mp3,但是如何用两个周期来处理这些文件名.tar.gz.

基本代码是:

filename = '/home/lancaster/Downloads/a.ppt'
extention = filename.split('/')[-1]
Run Code Online (Sandbox Code Playgroud)

但很明显,这段代码不能像文件一样工作a.tar.gz.怎么处理呢?谢谢.

Or *_*uan 36

Python 3.4

您现在可以使用Pathpathlib.它有许多功能,其中之一是suffix:

>>> from pathlib import Path
>>> Path('my/library/setup.py').suffix
'.py'
>>> Path('my/library.tar.gz').suffix
'.gz'
>>> Path('my/library').suffix
''
Run Code Online (Sandbox Code Playgroud)

如果要获得多个后缀,请使用suffixes:

>>> from pathlib import Path
>>> Path('my/library.tar.gar').suffixes
['.tar', '.gar']
>>> Path('my/library.tar.gz').suffixes
['.tar', '.gz']
>>> Path('my/library').suffixes
[]
Run Code Online (Sandbox Code Playgroud)


Rah*_*K P 21

这是一个in build模块os.更多关于os.path.splitext.

In [1]: from os.path import splitext
In [2]: file_name,extension = splitext('/home/lancaster/Downloads/a.ppt')
In [3]: extension
Out[1]: '.ppt'
Run Code Online (Sandbox Code Playgroud)

如果你必须改进扩展名.tar.gz,.tar.bz2你必须编写这样的函数

from os.path import splitext
def splitext_(path):
    for ext in ['.tar.gz', '.tar.bz2']:
        if path.endswith(ext):
            return path[:-len(ext)], path[-len(ext):]
    return splitext(path)
Run Code Online (Sandbox Code Playgroud)

结果

In [4]: file_name,ext = splitext_('/home/lancaster/Downloads/a.tar.gz')
In [5]: ext
Out[2]: '.tar.gz'
Run Code Online (Sandbox Code Playgroud)

编辑

通常你可以使用这个功能

from os.path import splitext
def splitext_(path):
    if len(path.split('.')) > 2:
        return path.split('.')[0],'.'.join(path.split('.')[-2:])
    return splitext(path)
Run Code Online (Sandbox Code Playgroud)

它适用于所有扩展.

处理所有文件.

In [6]: inputs = ['a.tar.gz', 'b.tar.lzma', 'a.tar.lz', 'a.tar.lzo', 'a.tar.xz','a.png']
In [7]: for file_ in inputs:                                                                    
    file_name,extension = splitext_(file_)
    print extension
   ....:     
tar.gz
tar.lzma
tar.lz
tar.lzo
tar.xz
.png
Run Code Online (Sandbox Code Playgroud)


Joh*_*ger 5

文件扩展名的作用是告诉查看者(有时是计算机)使用哪个应用程序来处理文件.

以你的评论(a.ppt.tar.gz)中最糟糕的例子为例,这是一个已经tar-balled然后gzip压缩的PowerPoint文件.所以你需要使用gzip处理程序来打开它.使用PowerPoint或tarball处理程序是行不通的.好的,一个知道如何处理这两个文件.tar.gz文件的聪明程序可以理解操作和使用.tar.gz文件 - 但请注意,即使扩展只是简单.gz,它也会这样做.

这两个事实targzip他们的扩展添加到原文件名,而不是取代它们(如zip做)是一个便利.但是gzip文件的基本名称仍然存在a.ppt.tar.