2010-05-24 27 views

Respuesta

24

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) 
+0

¿Puede ser más específico, vi la documentación antes también, pero no funcionó. – MysticCodes

+0

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

+6

Corrección: 'os.rename (root, root + new_extension)' debería leer 'os.rename (renamee, root + new_extension)' – mloskot

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

Dónde thisFile = la ruta absoluta del archivo que está cambiando

+5

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

11

Utilice esta:

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

Y aquí es cómo lo anterior funciona:

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

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

la tupla creado ahora contiene las cuerdas "nombre" y "FASTA". Luego hay que acceder sólo 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" 
8

A partir de Python 3.4 hay pathlib biblioteca incorporada. Por lo 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

+0

¡Esta es una lib realmente genial! ¡Gracias! –

+0

Esto es aún mejor con la sintaxis de interpolación de cadenas de Python 3.6 (https://www.python.org/dev/peps/pep-0498/) 'new_filename = f" {Path (filename) .stem} .aln "' –

+0

Tenga cuidado: el tallo también retiene el camino si hay uno presente. Si desea cambiar el nombre del archivo y si se proporcionó una ruta (lo que sin duda no estaba en la pregunta), esta técnica fallaría. –

4

Una forma elegante utilizando pathlib.Path:

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

Aunque OP no pidió realizar un cambio de nombre, estaba en las etiquetas, y si va a realizar un cambio de nombre y si es posible, la entrada puede tener una ruta y no solo un nombre de archivo, esta técnica es la correcta uno. –

Cuestiones relacionadas