2010-12-14 19 views

Respuesta

172

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

os.path.splitext(filename)[0] 

Esto también se encargará de un nombre de fichero como .bashrc correctamente manteniendo el nombre completo.

+0

@nate c: I modificado mi respuesta mientras estaba escribiendo su comentario . –

+2

No funciona correctamente con "git-1.7.8.tar.gz", donde solo elimina ".gz". Yo uso 'basename [: - len (". Tar.gz ")]' para esto. – blueyed

+25

@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 elimina la última. Si quieres manejar casos extremos como '.tar.gz', tendrás que hacerlo a mano. Obviamente, no puedes quitar todos los puntos, ya que terminarás con 'git-1'. –

21
>>> import os 
>>> os.path.splitext("1.1.1.1.1.jpg") 
('1.1.1.1.1', '.jpg') 
5

No hay necesidad de expresiones regulares. os.path.splitext es su amigo:

os.path.splitext('1.1.1.jpg') 
>>> ('1.1.1', '.jpg') 
8

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

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