Изменение расширения файла в Python - PullRequest
49 голосов
/ 25 мая 2010

Предположим, с index.py с CGI, у меня есть файл поста foo.fasta для отображения файла Я хочу изменить расширение foo.fasta на foo.aln в отображаемом файле. Как я могу это сделать?

Ответы [ 6 ]

58 голосов
/ 09 сентября 2011
import os
thisFile = "mysequence.fasta"
base = os.path.splitext(thisFile)[0]
os.rename(thisFile, base + ".aln")

Где thisFile = абсолютный путь к файлу, который вы меняете

38 голосов
/ 28 ноября 2017

Элегантный способ с использованием pathlib.Path :

from pathlib import Path
p = Path('mysequence.fasta')
p.rename(p.with_suffix('.aln'))
32 голосов
/ 25 мая 2010

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

например:

# 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)
19 голосов
/ 10 февраля 2017

Начиная с Python 3.4, есть pathlib встроенная библиотека. Таким образом, код может быть что-то вроде:

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

Я люблю pathlib:)

13 голосов
/ 11 февраля 2015

Используйте это:

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

А вот как работает вышеперечисленное:

Метод splitext отделяет имя от расширения, создавая кортеж:

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

созданный кортеж теперь содержит строки "name" и "fasta". Затем вам нужно получить доступ только к строке «name», которая является первым элементом кортежа:

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

И затем вы хотите добавить новое расширение к этому имени:

os.path.splitext("name.fasta")[0]+".aln"
2 голосов
/ 20 августа 2018

Использование pathlib и сохранение полного пути:

from pathlib import Path
p = Path('/User/my/path')
new_p = Path(p.parent.as_posix() + '/' + p.stem + '.aln')
...