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.


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


10

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

s = re.sub(r'\.jpg$', '', s)

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

6

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

os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.