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

39

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

Теги:
rename
file-extension

6 ответов

58
import os
thisFile = "mysequence.fasta"
base = os.path.splitext(thisFile)[0]
os.rename(thisFile, base + ".aln")

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

  • 5
    Мне нравится этот ответ больше, потому что он дает пример, а не просто приводит методы, необходимые для выполнения задачи. Спасибо @FryDay
  • 1
    base, _ = os.path.splitext(thisFile) более идиоматичен.
31

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

например:

# 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)
  • 0
    Можете ли вы быть более конкретным, я тоже видел документацию раньше, но не работал.
  • 0
    Используйте первую функцию, чтобы получить базу. Объедините его с новым расширением и передайте старое имя файла и новое имя файла второй функции.
Показать ещё 3 комментария
23

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

from pathlib import Path
p = Path('mysequence.fasta')
p.rename(p.with_suffix('.aln'))
  • 1
    Хотя ОП не просил выполнить переименование, это было в тегах, и если вы собираетесь выполнить переименование и, если возможно, вход может иметь путь, а не просто имя файла, этот метод является правильным ,
  • 2
    Что касается .with_suffix() , свойства .suffix и .suffixes должны иметь установщики.
15

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

  • 0
    Это серьезно крутая библиотека! Спасибо!
  • 0
    Будьте осторожны - ствол также лишает пути, если он присутствует. Если вы хотите переименовать файл, и если указан путь (чего, по общему признанию, в вопросе не было), эта методика потерпит неудачу.
Показать ещё 1 комментарий
13

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

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

И вот как это работает:

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

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

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

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню