Si tengo un nombre de archivo como uno de estos:
1.1.1.1.1.jpg
1.1.jpg
1.jpg
¿Cómo puedo obtener solo el nombre del archivo, sin la extensión? ¿Sería apropiado un regex?
Si tengo un nombre de archivo como uno de estos:
1.1.1.1.1.jpg
1.1.jpg
1.jpg
¿Cómo puedo obtener solo el nombre del archivo, sin la extensión? ¿Sería apropiado un regex?
Respuestas:
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á .bashrc
correctamente un nombre de archivo como manteniendo el nombre completo.
basename[:-len(".tar.gz")]
para esto.
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
.
>>> import os
>>> os.path.splitext("1.1.1.1.1.jpg")
('1.1.1.1.1', '.jpg')
Si tuviera que hacer esto con una expresión regular, lo haría así:
s = re.sub(r'\.jpg$', '', s)
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