HOWTO · Python
Obter extensão de ficheiros em Python
Demonstra como obter a extensão do ficheiro em Python.
Nesta página
Para obter a extensão de um nome de arquivo em Python, use os.path.splitext() para separar o sufixo final ou pathlib.Path.suffixes quando precisar das partes de um sufixo composto, como .tar.bz2. Os exemplos abaixo mostram a estrutura de cada resultado para ajudar você a escolher o formato adequado ao seu código.
Use o módulo os.path para extrair a extensão de um arquivo em Python
os.path oferece funções utilitárias para trabalhar com caminhos do sistema operacional. A função splitext() retorna uma tupla com dois itens: o caminho raiz e a extensão final. Atribua os itens nessa ordem, mesmo que escolha nomes diferentes para as variáveis.
Execute este exemplo com um caminho terminado em .docx:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
import os
path = "/Users/user/Documents/sampledoc.docx"
root, extension = os.path.splitext(path)
print("Root:", root)
print("Extension:", extension)
Root: /Users/user/Documents/sampledoc
Extension: .docx
A saída apresenta primeiro o caminho raiz e depois a extensão. splitext() considera apenas o sufixo final: em um nome como backup.tar.gz, separa .gz e mantém backup.tar na raiz.
A extensão retornada por splitext() inclui o ponto inicial, o que facilita comparações como extension == ".csv". Se o nome do arquivo não tiver sufixo, a parte da extensão será uma string vazia e a raiz continuará sendo o próprio nome do arquivo. Um ponto inicial, sozinho, não conta como sufixo; por isso, pela regra de splitext(), um nome como .profile não tem extensão. Os rótulos textuais exibidos pelo exemplo permanecem em inglês, pois o bloco de código é mantido exatamente como no original.
Use o módulo pathlib para extrair a extensão de um arquivo em Python
pathlib representa caminhos por meio de objetos. Crie um Path a partir de uma string com o caminho e consulte seus atributos: parent é o caminho que contém o arquivo, name é o componente final do caminho e suffix é o sufixo final, incluindo o ponto inicial.
Para um arquivo com um único sufixo, como sampledoc.docx, path.suffix é .docx. Os atributos são valores, então você os consulta sem parênteses. Este exemplo independente também mostra a diferença entre suffix e suffixes:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
import pathlib
single = pathlib.Path("/Users/user/Documents/sampledoc.docx")
archive = pathlib.Path("/Users/user/Documents/app_sample.tar.bz2")
print("Parent:", single.parent)
print("Filename:", single.name)
print("Final suffix:", single.suffix)
print("Suffix parts:", single.suffixes)
print("Archive suffix:", "".join(archive.suffixes))
Parent: /Users/user/Documents
Filename: sampledoc.docx
Final suffix: .docx
Suffix parts: ['.docx']
Archive suffix: .tar.bz2
A saída apresenta o caminho que contém o arquivo, o nome final, o sufixo final, a lista de sufixos e o sufixo do arquivo compactado formado pela junção dos itens. suffixes é uma lista: para sampledoc.docx, contém um item, .docx; para app_sample.tar.bz2, contém .tar e .bz2. Juntar essas partes com uma string vazia produz .tar.bz2. Isso é útil quando a aplicação trata um sufixo composto como uma unidade, embora muitos nomes de arquivo tenham apenas um sufixo.
Quando um caminho não tem sufixo, Path.suffix é uma string vazia e Path.suffixes é uma lista vazia. Um ponto inicial sozinho, como em .profile, não é retornado como sufixo. Mantenha a lista se o código precisar examinar cada parte depois; junte os itens somente quando a aplicação esperar um único valor composto. Esses atributos descrevem o componente final do nome no caminho, independentemente de ele apontar para um arquivo existente.
Escolha os.path.splitext() quando precisar apenas do sufixo final ou também quiser obter a raiz na mesma operação. Use Path.suffix para obter um único sufixo com um objeto de caminho, e Path.suffixes quando precisar das partes separadas ou quiser juntá-las em um valor composto. As duas abordagens examinam o nome; nenhuma verifica se o arquivo existe.