Angenommen, index.py
mit CGI habe ich eine Post-Datei foo.fasta
, um die Datei anzuzeigen. Ich möchte die foo.fasta
Dateierweiterung so ändern , dass sie foo.aln
in der Anzeigedatei angezeigt wird. Wie kann ich es tun?
Angenommen, index.py
mit CGI habe ich eine Post-Datei foo.fasta
, um die Datei anzuzeigen. Ich möchte die foo.fasta
Dateierweiterung so ändern , dass sie foo.aln
in der Anzeigedatei angezeigt wird. Wie kann ich es tun?
Antworten:
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)
os.rename(root, root + new_extension)
sollte lesenos.rename(renamee, root + new_extension)
Ein eleganter Weg mit pathlib.Path :
from pathlib import Path
p = Path('mysequence.fasta')
p.rename(p.with_suffix('.aln'))
.with_suffix()
die Eigenschaften .suffix
und .suffixes
sollte Setter haben.
import os
thisFile = "mysequence.fasta"
base = os.path.splitext(thisFile)[0]
os.rename(thisFile, base + ".aln")
Wobei thisFile = der absolute Pfad der Datei ist, die Sie ändern
base, _ = os.path.splitext(thisFile)
ist idiomatischer.
Ab Python 3.4 gibt es eine in pathlib integrierte Bibliothek. Der Code könnte also ungefähr so aussehen:
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 :)
new_filename = f"{Path(filename).stem}.aln"
😎😎😎
p.parent / (p.stem + '.aln')
wird dir einen neuen Weg geben.
Benutze das:
os.path.splitext("name.fasta")[0]+".aln"
Und so funktioniert das oben Genannte:
Die Splitext-Methode trennt den Namen von der Erweiterung und erstellt ein Tupel:
os.path.splitext("name.fasta")
Das erstellte Tupel enthält jetzt die Zeichenfolgen "Name" und "Fasta". Dann müssen Sie nur auf die Zeichenfolge "name" zugreifen, die das erste Element des Tupels ist:
os.path.splitext("name.fasta")[0]
Und dann möchten Sie diesem Namen eine neue Erweiterung hinzufügen:
os.path.splitext("name.fasta")[0]+".aln"
Wie AnaPana erwähnte, ist pathlib in Python 3.4 neuer und einfacher, und es gibt eine neue with_suffix-Methode, die dieses Problem leicht lösen kann:
from pathlib import Path
new_filename = Path(mysequence.fasta).with_suffix('.aln')
Leider habe ich einen Fall mit mehreren Punkten auf dem Dateinamen erlebt, bei dem Splittext nicht gut funktioniert hat ... meine Arbeit um:
file = r'C:\Docs\file.2020.1.1.xls'
ext = '.'+ os.path.realpath(file).split('.')[-1:][0]
filefinal = file.replace(ext,'.zip')
os.rename(file ,filefinal)