Obtener nombre de archivo sin extensión en Python

Respuestas:

203

En la mayoría de los casos, no debe usar una expresión regular para eso.

os.path.splitext(filename)[0]

Esto también manejará .bashrccorrectamente un nombre de archivo como manteniendo el nombre completo.

Marcelo Cantos
fuente
4
No funciona correctamente con "git-1.7.8.tar.gz", donde solo elimina el ".gz". Yo uso basename[:-len(".tar.gz")]para esto.
blueyed
28
@blueyed: "No funciona correctamente" es una cuestión de perspectiva. El archivo es un archivo gzip, cuyo nombre base es git-1.7.8.tar. No hay forma de adivinar correctamente cuántos puntos quiere quitar la persona que llama, por lo que splitext()solo quita el último. Si desea manejar casos de borde como .tar.gz, tendrá que hacerlo a mano. Obviamente, no puedes quitar todos los puntos, ya que terminarás con git-1.
Marcelo Cantos
26
>>> import os
>>> os.path.splitext("1.1.1.1.1.jpg")
('1.1.1.1.1', '.jpg')
Lennart Regebro
fuente
10

Si tuviera que hacer esto con una expresión regular, lo haría así:

s = re.sub(r'\.jpg$', '', s)
Alan Moore
fuente
7

Puede usar el método de la raíz para obtener el nombre del archivo.

Aquí hay un ejemplo:

from pathlib import Path

p = Path(r"\\some_directory\subdirectory\my_file.txt")
print(p.stem)
# my_file
Vlad Bezden
fuente
6

No hay necesidad de expresiones regulares. os.path.splitextes tu amigo:

os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')
Tríptico
fuente