Изменение расширения файла в Python

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

6 ответов

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

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

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)
import os
thisFile = "mysequence.fasta"
base = os.path.splitext(thisFile)[0]
os.rename(thisFile, base + ".aln")

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

Начиная с 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:)

Использовать этот:

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"

Как упомянула AnaPana, pathlib более новый и более простой в python 3.4, и есть новый метод with_suffix, который может легко справиться с этой проблемой:

from pathlib import Path
new_filename = Path(mysequence.fasta).with_suffix('.aln')

К сожалению, я столкнулся с несколькими точками в имени файла, когда разделенный текст не работал хорошо... моя работа:

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)

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

from pathlib import Path
p = Path('/User/my/path')
new_p = Path(p.parent.as_posix() + '/' + p.stem + '.aln')
>> 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) 

Плохая логика для повторения расширения, пример: 'C:\Docs\.xls_aaa.xls.xls'

Другие вопросы по тегам