Supponiamo di index.py
con CGI, ho il file postale foo.fasta
per visualizzare il file. Voglio cambiare l'estensione del file foo.fasta
per essere foo.aln
nel file di visualizzazione. Come posso farlo?Modifica dell'estensione del file in Python
risposta
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)
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
Mi piace questa risposta di più perché fornisce un esempio e non cita solo i metodi necessari per eseguire l'attività. Grazie @FryDay – sadmicrowave
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"
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 :)
Questa è una libreria seriamente fantastica !!! Grazie! –
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 "' –
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. –
Un modo elegante utilizzando pathlib.Path:
from pathlib import Path
p = Path('mysequence.fasta')
p.rename(p.with_suffix('.aln'))
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. –
Può essere più preciso, ho visto la documentazione anche prima, ma non ha funzionato. – MysticCodes
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 –
: 'os.rename (root, root + new_extension)' dovrebbe leggere 'os.rename (renamee, root + new_extension)' – mloskot