Извлечение расширения из имени файла в Python - PullRequest
1065 голосов
/ 12 февраля 2009

Есть ли функция для извлечения расширения из имени файла?

Ответы [ 20 ]

8 голосов
/ 18 февраля 2014
filename='ext.tar.gz'
extension = filename[filename.rfind('.'):]
7 голосов
/ 11 августа 2018

Вы можете найти некоторые замечательные вещи в модуле pathlib.

import pathlib
x = pathlib.PurePosixPath("C:\\Path\\To\\File\\myfile.txt").suffix
print(x)

# Output 
'.txt'
6 голосов
/ 15 марта 2018

Вы можете использовать split на filename:

f_extns = filename.split(".")
print ("The extension of the file is : " + repr(f_extns[-1]))

Для этого не требуется дополнительная библиотека

5 голосов
/ 12 августа 2018

Просто join все pathlib suffixes.

>>> x = 'file/path/archive.tar.gz'
>>> y = 'file/path/text.txt'
>>> ''.join(pathlib.Path(x).suffixes)
'.tar.gz'
>>> ''.join(pathlib.Path(y).suffixes)
'.txt'
4 голосов
/ 18 апреля 2018

Это методы прямого представления строки: Я вижу много упомянутых решений, но я думаю, что большинство смотрит на раскол. Сплит, однако, делает это при каждом появлении "." , То, что вы бы предпочли, это раздел.

string = "folder/to_path/filename.ext"
extension = string.rpartition(".")[-1]
3 голосов
/ 03 января 2014

Другое решение с правым разделением:

# to get extension only

s = 'test.ext'

if '.' in s: ext = s.rsplit('.', 1)[1]

# or, to get file name and extension

def split_filepath(s):
    """
    get filename and extension from filepath 
    filepath -> (filename, extension)
    """
    if not '.' in s: return (s, '')
    r = s.rsplit('.', 1)
    return (r[0], r[1])
3 голосов
/ 30 октября 2017

Даже на этот вопрос уже дан ответ, я бы добавил решение в Regex.

>>> import re
>>> file_suffix = ".*(\..*)"
>>> result = re.search(file_suffix, "somefile.ext")
>>> result.group(1)
'.ext'
0 голосов
/ 01 апреля 2015
# try this, it works for anything, any length of extension
# e.g www.google.com/downloads/file1.gz.rs -> .gz.rs

import os.path

class LinkChecker:

    @staticmethod
    def get_link_extension(link: str)->str:
        if link is None or link == "":
            return ""
        else:
            paths = os.path.splitext(link)
            ext = paths[1]
            new_link = paths[0]
            if ext != "":
                return LinkChecker.get_link_extension(new_link) + ext
            else:
                return ""
0 голосов
/ 22 августа 2014
name_only=file_name[:filename.index(".")

Это даст вам имя файла с точностью до первого ".", Которое будет наиболее распространенным.

0 голосов
/ 06 ноября 2015
def NewFileName(fichier):
    cpt = 0
    fic , *ext =  fichier.split('.')
    ext = '.'.join(ext)
    while os.path.isfile(fichier):
        cpt += 1
        fichier = '{0}-({1}).{2}'.format(fic, cpt, ext)
    return fichier
...