Cambiar la extensión de archivo en Python

3 minutos de lectura

avatar de usuario
códigos místicos

supongamos de index.py con CGI, tengo un archivo de publicación foo.fasta para mostrar el archivo. quiero cambiar foo.fastala extensión de archivo de ser foo.aln en el archivo de visualización. ¿Cómo puedo hacerlo?

  • ¿Responde esto a tu pregunta? ¿Cómo reemplazar (o eliminar) una extensión de un nombre de archivo en Python?

    – Tomerikoo

    26 de mayo de 2021 a las 14:27

avatar de usuario
Nikita Malyavin

Una forma elegante de usar pathlib.Path:

from pathlib import Path
p = Path('mysequence.fasta')
p.rename(p.with_suffix('.aln'))

  • Aunque el OP no solicitó realizar un cambio de nombre, estaba en las etiquetas, y si va a realizar un cambio de nombre y si es posible, la entrada podría tener una ruta y no solo un nombre de archivo, esta técnica es la correcta. .

    – Jason R. Coombs

    11 de febrero de 2018 a las 15:51

  • Con respecto a .with_suffix()las propiedades .suffix y .suffixes debe tener setters.

    – Polv

    16 de julio de 2018 a las 6:50


  • Curiosamente, parece que .suffix es de solo lectura, al menos a partir de 3.9.5.

    – Jesse

    13 de mayo a las 22:46

  • @Jesse Paths son inmutables docs.python.org/3/library/pathlib.html#general-properties

    – Nikita Malyavin

    17 de mayo a las 15:25

avatar de usuario
Ignacio Vázquez-Abrams

os.path.splitext(), os.rename()

por ejemplo:

# renamee is the file getting renamed, pre is the part of file name before extension and ext is current extension
pre, ext = os.path.splitext(renamee)
os.rename(renamee, pre + new_extension)

  • ¿Puede ser más específico? También vi la documentación antes, pero no funcionó.

    – Códigos místicos

    24 mayo 2010 a las 21:17

  • Usa la primera función para obtener la base. Combínelo con la nueva extensión y pase el nombre de archivo antiguo y el nuevo nombre de archivo a la segunda función.

    – Ignacio Vázquez-Abrams

    24 mayo 2010 a las 21:20

  • Corrección: os.rename(root, root + new_extension) tiene que leer os.rename(renamee, root + new_extension)

    – mloskot

    20 de mayo de 2014 a las 10:16


  • en realidad, es mejor usar este método para python3: pathlib.path(pathtofile).with_suffix(“.mynewext”). La forma sugerida con pathlib.path(pathtofile).stem funciona pero eliminará la ruta antes del nombre base.

    – Bimo

    17 de agosto de 2017 a las 15:59


  • str(pathlib.path(pathtofile).with_suffix(“.mynewext”))

    – Bimo

    17 de agosto de 2017 a las 16:13

avatar de usuario
FryDay

import os
thisFile = "mysequence.fasta"
base = os.path.splitext(thisFile)[0]
os.rename(thisFile, base + ".aln")

Donde thisFile = la ruta absoluta del archivo que está cambiando

  • Me gusta más esta respuesta porque proporciona un ejemplo y no solo cita los métodos necesarios para realizar la tarea. Gracias @FryDay

    – microonda triste

    30 de agosto de 2013 a las 3:45

  • base, _ = os.path.splitext(thisFile) es más idiomático.

    – jpmc26

    12 dic 2018 a las 20:42

A partir de Python 3.4 hay rutalib biblioteca incorporada. Así que el código podría ser algo como:

from pathlib import Path

filename = "mysequence.fasta"
new_filename = Path(filename).stem + ".aln"

https://docs.python.org/3.4/library/pathlib.html#pathlib.PurePath.stem

Me encanta pathlib 🙂

avatar de usuario
multibuenverso

Utilizar este:

os.path.splitext("name.fasta")[0]+".aln"

Y así es como funciona lo anterior:

El método splitext separa el nombre de la extensión creando una tupla:

os.path.splitext("name.fasta")

la tupla creada ahora contiene las cadenas “nombre” y “fasta”. Luego, solo necesita acceder a la cadena “nombre”, que es el primer elemento de la tupla:

os.path.splitext("name.fasta")[0]

Y luego desea agregar una nueva extensión a ese nombre:

os.path.splitext("name.fasta")[0]+".aln"

avatar de usuario
mahdi saravi

Como mencionó AnaPana, pathlib es más nuevo y más fácil en python 3.4 y hay un nuevo método with_suffix que puede manejar este problema fácilmente:

from pathlib import Path
new_filename = Path(mysequence.fasta).with_suffix('.aln')

avatar de usuario
PollPenn

Usando pathlib y conservando la ruta completa:

from pathlib import Path
p = Path('/User/my/path')
new_p = Path(p.parent.as_posix() + "https://stackoverflow.com/" + p.stem + '.aln')

  • para hacerlo un poco más simple new_p = Path(p.with_suffix('').as_posix() + '.aln')

    – Jiho Noh

    14 mayo 2019 a las 19:35


¿Ha sido útil esta solución?