HOWTO · Python
Obtener la extensión del archivo en Python
Demuestra cómo obtener la extensión del archivo en Python.
En esta página
Para obtener la extensión de un nombre de archivo en Python, usa os.path.splitext() si necesitas el sufijo final o pathlib.Path.suffixes si necesitas varias partes, como .tar.bz2. Los ejemplos muestran la estructura de cada resultado para que elijas el formato que necesita tu código.
Usa el módulo os.path para extraer la extensión de un archivo en Python
os.path ofrece funciones de utilidad para trabajar con rutas del sistema operativo. Su función splitext() devuelve una tupla de dos elementos: la ruta raíz y la extensión final. Asigna los elementos de la tupla en ese orden, aunque les des otros nombres a las variables.
Ejecuta este ejemplo con una ruta que termine en .docx:
El código y las etiquetas o salidas visibles de esta sección se mantienen en 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
La salida muestra primero la ruta raíz y después la extensión. splitext() solo tiene en cuenta el sufijo final: en un nombre como backup.tar.gz, separa .gz y deja backup.tar en la raíz.
La extensión que devuelve splitext() incluye el punto inicial, lo que facilita comparaciones como extension == ".csv". Si el nombre de archivo no tiene sufijo, la parte de la extensión es una cadena vacía y la raíz sigue siendo el nombre del archivo. Un punto inicial por sí solo no cuenta como sufijo; por eso, según esta regla, un nombre como .profile no tiene extensión.
Usa el módulo pathlib para extraer la extensión de un archivo en Python
pathlib representa las rutas mediante objetos. Crea un Path a partir de una cadena con la ruta y luego consulta sus atributos: parent es la ruta que contiene el archivo, name es el último componente de la ruta y suffix es el sufijo final, incluido el punto inicial.
Para un archivo con un solo sufijo, como sampledoc.docx, path.suffix es .docx. Los atributos son valores, así que se consultan sin paréntesis. Este ejemplo independiente también muestra la diferencia entre suffix y suffixes:
El código y las etiquetas o salidas visibles de esta sección se mantienen en 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
La salida muestra la ruta que contiene el archivo, el nombre final, el sufijo final, la lista de sufijos y el sufijo del archivo comprimido concatenado. suffixes es una lista: para sampledoc.docx contiene un elemento, .docx; para app_sample.tar.bz2 contiene .tar y .bz2. Al unir esas partes con una cadena vacía se obtiene .tar.bz2. Esto resulta útil cuando la aplicación trata un sufijo compuesto como una sola unidad, aunque muchos nombres de archivo tienen un solo sufijo.
Si la ruta no tiene sufijo, Path.suffix es una cadena vacía y Path.suffixes es una lista vacía. Un punto inicial por sí solo, como en .profile, no se devuelve como sufijo. Conserva la lista si el código posterior necesita examinar cada parte; únela solo cuando la aplicación espere un único valor compuesto. Estos atributos describen el último componente del nombre de la ruta, exista o no actualmente el archivo al que apunta.
Elige os.path.splitext() cuando solo necesites el sufijo final o también quieras obtener la raíz en la misma operación. Elige Path.suffix para obtener un solo sufijo usando una ruta orientada a objetos, y Path.suffixes si necesitas los componentes por separado o unidos como un valor compuesto. Ambos métodos inspeccionan el nombre; ninguno comprueba que el archivo exista.