una txt recorrer partir nombre lista leer importar gestion español ejercicios directorios crear como carpeta archivos archivo python scons

txt - ¿Cómo reemplazar(o quitar) una extensión de un nombre de archivo en Python?



readlines python español (6)

¿Existe una función incorporada en Python que reemplace (o elimine, cualquiera que sea) la extensión de un nombre de archivo (si tiene uno)?

Ejemplo:

print replace_extension(''/home/user/somefile.txt'', ''.jpg'')

En mi ejemplo: /home/user/somefile.txt se convertiría en /home/user/somefile.jpg

No sé si importa, pero necesito esto para un módulo SCons que estoy escribiendo. (¿Entonces tal vez hay alguna función específica de SCons que puedo usar?)

Me gustaría algo limpio . Obviamente, no está limpio realizar una simple sustitución de cadena de todas las apariciones de .txt dentro de la cadena. (Esto fallaría si mi nombre de archivo es somefile.txt.txt.txt )


Ampliando la respuesta de AnaPana, cómo eliminar una extensión usando pathlib (Python> = 3.4):

>>> from pathlib import Path >>> filename = Path(''/some/path/somefile.txt'') >>> filename_wo_ext = filename.with_suffix('''') >>> filename_replace_ext = filename.with_suffix(''.jpg'') >>> print(filename) /some/path/somefile.ext >>> print(filename_wo_ext) /some/path/somefile >>> print(filename_replace_ext) /some/path/somefile.jpg


Como dijo @jethro, splitext es la mejor manera de hacerlo. Pero en este caso, es bastante fácil dividirlo usted mismo, ya que la extensión debe ser la parte del nombre de archivo que viene después del último período:

filename = ''/home/user/somefile.txt'' print( filename.rsplit( ".", 1 )[ 0 ] ) # ''/home/user/somefile''

El rsplit le dice a Python que realice las divisiones de la cadena comenzando desde la derecha de la cadena, y el 1 dice que se ejecute como máximo una división (de modo que, por ejemplo, ''foo.bar.baz'' -> [ ''foo.bar'', ''baz'' ] ). Como rsplit siempre devolverá una matriz no vacía, podemos indizar con seguridad 0 en ella para obtener el nombre de archivo menos la extensión.


Intente os.path.splitext debería hacer lo que quiera.

import os print os.path.splitext(''/home/user/somefile.txt'')[0]+''.jpg''


Otra forma de hacerlo es usar el str.rpartition(sep) .

Por ejemplo:

filename = ''/home/user/somefile.txt'' (prefix, sep, suffix) = filename.rpartition(''.'') new_filename = prefix + ''.jpg'' print new_filename


Para Python> = 3.4:

from pathlib import Path filename = ''/home/user/somefile.txt'' p = Path(filename) new_filename = p.parent.joinpath(p.stem + ''.jpg'') # PosixPath(''/home/user/somefile.jpg'') new_filename_str = str(new_filename) # ''/home/user/somefile.jpg''


Prefiero el siguiente enfoque de una línea utilizando str.rsplit() :

my_filename.rsplit(''.'', 1)[0] + ''.jpg''

Ejemplo:

>>> my_filename = ''/home/user/somefile.txt'' >>> my_filename.rsplit(''.'', 1) >>> [''/home/user/somefile'', ''txt'']