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')
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.fuente
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 quesplitext()
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 congit-1
.>>> import os >>> os.path.splitext("1.1.1.1.1.jpg") ('1.1.1.1.1', '.jpg')
fuente
Si tuviera que hacer esto con una expresión regular, lo haría así:
s = re.sub(r'\.jpg$', '', s)
fuente
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
fuente
No hay necesidad de expresiones regulares.
os.path.splitext
es tu amigo:os.path.splitext('1.1.1.jpg') >>> ('1.1.1', '.jpg')
fuente