2010-05-24 11 views

risposta

24

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

ad esempio:

# 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

Può essere più preciso, ho visto la documentazione anche prima, ma non ha funzionato. – MysticCodes

+0

Usa la prima funzione per ottenere la base. Combinalo con la nuova estensione e passa il vecchio nome file e il nuovo nome file alla seconda funzione. Correzione –

+6

: 'os.rename (root, root + new_extension)' dovrebbe leggere 'os.rename (renamee, root + new_extension)' – mloskot

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

Dove thisFile = il percorso assoluto del file che si sta modificando

+5

Mi piace questa risposta di più perché fornisce un esempio e non cita solo i metodi necessari per eseguire l'attività. Grazie @FryDay – sadmicrowave

11

Utilizzare questa:

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

Ed ecco come le opere di cui sopra:

Il metodo splitext separa il nome dall'estensione creare una tupla:

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

tupla creato ora contiene le stringhe "nome" e "FASTA". allora avete bisogno di accedere solo la stringa "nome" che è il primo elemento della tupla:

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

E poi si vuole aggiungere una nuova estensione a quel nome:

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

A partire da Python 3.4 contiene la libreria integrata pathlib. Così il codice potrebbe essere qualcosa del tipo:

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

amo pathlib :)

+0

Questa è una libreria seriamente fantastica !!! Grazie! –

+0

Questo è ancora meglio con la sintassi dell'interpolazione di stringa Python 3.6 (https://www.python.org/dev/peps/pep-0498/) 'new_filename = f" {Path (filename) .stem} .aln "' –

+0

Fai attenzione: anche il gambo spoglia il percorso se ne è presente uno. Se si desidera rinominare il file e se è stato fornito un percorso (che certamente non era nella domanda), questa tecnica fallirebbe. –

4

Un modo elegante utilizzando pathlib.Path:

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

Sebbene l'OP non abbia chiesto di eseguire una rinomina, era nei tag, e se hai intenzione di eseguire un cambio di nome e se è possibile che l'input possa avere un percorso e non solo un nome file, questa tecnica è quella giusta uno. –