Angenommen von index.py
mit CGI, habe ich Post-Datei foo.fasta
, um die Datei anzuzeigen. Ich möchte die Dateierweiterung foo.fasta
in foo.aln
in der Anzeigedatei ändern. Wie kann ich es tun?Ändern der Dateierweiterung in Python
Antwort
os.path.splitext()
, os.rename()
zum Beispiel:
# 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")
Wo diesedatei den absoluten Pfad der Datei = Sie ändern
Ich mag diese Antwort mehr, weil sie ein Beispiel liefert und nicht nur die Methoden angibt, die benötigt werden, um die Aufgabe zu erfüllen. Danke @FryDay – sadmicrowave
verwenden:
os.path.splitext("name.fasta")[0]+".aln"
Und hier ist, wie die oben genannten Arbeiten:
Die splitext Methode die Namen von der Erweiterung trennt ein Tupel zu erstellen:
os.path.splitext("name.fasta")
die erzeugte Tupel nun die Saiten „Namen“ und „fasta“ enthält. Dann brauchen Sie nur die Zeichenfolge „Name“ zuzugreifen, die das erste Element des Tupels ist:
os.path.splitext("name.fasta")[0]
Und dann wollen Sie eine neue Erweiterung zu diesem Namen hinzuzufügen:
os.path.splitext("name.fasta")[0]+".aln"
ab Python 3.4 gibt es pathlib eingebaute Bibliothek. So könnte der Code so etwas wie sein:
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
Ich liebe pathlib :)
Dies ist eine ernsthaft coole lib !!! Vielen Dank! –
Dies ist noch besser mit Python 3.6 String-Interpolation Syntax (https://www.python.org/dev/peps/pep-0498/) 'new_filename = f" {Pfad (Dateiname) .stem} .aln "' –
Seien Sie vorsichtig - Vorbau streift auch den Pfad, wenn einer vorhanden ist. Wenn Sie die Datei umbenennen wollten und ein Pfad angegeben wurde (was zugegebenermaßen nicht in der Frage enthalten war), würde diese Technik fehlschlagen. –
Eine elegante Weise mit pathlib.Path:
from pathlib import Path
p = Path('mysequence.fasta')
p.rename(p.with_suffix('.aln'))
Obwohl das OP nicht gebeten hat, eine Umbenennung durchzuführen, war es in den Tags, und wenn Sie eine Umbenennung durchführen und wenn die Eingabe möglicherweise einen Pfad und nicht nur einen Dateinamen hat, ist diese Technik das Richtige ein. –
Können Sie das konkretisieren, ich sah Dokumentation vorher auch, aber hat nicht funktioniert. – MysticCodes
Verwenden Sie die erste Funktion, um die Basis zu erhalten. Kombinieren Sie es mit der neuen Erweiterung und übergeben Sie den alten Dateinamen und den neuen Dateinamen an die zweite Funktion. –
Korrektur: 'os.rename (root, root + new_extension)' sollte 'os.rename (umbenennen, root + new_extension)' – mloskot