Удаление или замена расширения файла в Python: решения

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам требуется удалить расширение файла, воспользуйтесь функцией os.path.splitext() из модуля os:

Python
Скопировать код
import os
name_without_ext = os.path.splitext('example.txt')[0]

Таким образом, имя файла преобразуется в 'example', и он теперь не имеет расширения.

Кинга Идем в IT: пошаговый план для смены профессии

Решение очевидное: использование os.path.splitext()

Работа с несколькими расширениями в имени файла

Если имя файла содержит несколько расширений, например .this.that, функция os.path.splitext() успешно удаляет их все:

Python
Скопировать код
import os
filename = "archive.tar.gz"
while '.' in filename:
    filename = os.path.splitext(filename)[0]
# Итоговое имя: 'archive'.

Совет для пользователей SCons

Те, кто используют SCons для сборки проектов, также найдут применение для os.path.splitext():

Python
Скопировать код
import os
env = Environment()
filename = 'source.c'
name_without_ext = os.path.splitext(filename)[0]
object_file = env.Object(target=name_without_ext, source=filename)

Пользуемся современными методами: приветствуем pathlib

Используйте модуль pathlib из Python 3.4+ для объектно-ориентированной работы с файлами.

Удаляем расширение с помощью pathlib

Python
Скопировать код
from pathlib import Path
name_without_ext = Path('example.txt').with_suffix('')  # расширение удалено

Заменяем старое расширение на новое

Python
Скопировать код
from pathlib import Path
new_name = Path('example.txt').with_suffix('.new_extension')  # заменяем расширение на новое

Создаем функцию для гибкого управления расширением файла

Python
Скопировать код
from pathlib import Path

def replace_ext(filename, new_extension=''):
    return Path(filename).with_suffix(new_extension)

new_name = replace_ext('example.txt', '.bak')  # теперь файл имеет расширение '.bak'

Такая функция позволяет эффективно управлять расширениями файлов.

Встречаем препятствия и преодолеваем их

Работаем с файлами без расширений

Python
Скопировать код
import os
filename = "README"  
name, extension = os.path.splitext(filename)
# name будет 'README', а extension останется пустым, так как нет расширения

Обрабатываем имена файлов с несколькими точками

Имена файлов вида 'my.file.name.txt' могут вызвать затруднения, но проблема решается так:

Python
Скопировать код
filename = 'my.file.name.txt'
name_without_ext = filename.rsplit('.', 1)[0]  
# Получаем 'my.file.name', сохраняя все промежуточные точки

Удаляется только последнее расширение, остальные точки остаются на месте.

Для проверки корректности работы используем утверждения

Python
Скопировать код
assert replace_ext('example.txt', '.bak') == 'example.bak'
assert replace_ext('archive.tar.gz', '.bz2') == 'archive.tar.bz2'

Утверждения помогают проверить правильность работы функций и избежать ошибок.

Визуализация

Возможно, будет полезно представить процесс преобразования имени файла как цепочку преобразований, где каждый шаг приближает нас к итоговому имени:

Markdown
Скопировать код
Имя файла: [document]🔗[report]🔗[v1]🔗[📄.pdf]

При применении os.path.splitext() получаем:

Python
Скопировать код
os.path.splitext('document_report_v1.pdf')[0];

Результат преобразования:

Markdown
Скопировать код
Изначальное имя: [document]🔗[report]🔗[v1]🔗[📄.pdf]
Итоговое имя: [document]🔗[report]🔗[v1]

Полезные материалы

  1. os.path — Работа с путями файлов — Документация Python 3.12.2 — Официальная документация о манипуляциях с путями файлов в Python.
  2. Извлечение расширения файла в Python – Stack Overflow — Полезные советы от опытных разработчиков о работе с расширениями файлов.
  3. Методы строк в Python – GeeksforGeeks — Обзор всех методов работы со строками в языке Python.
  4. pathlib — Объектно-ориентированные пути в файловой системе — Документация Python 3.12.2 — Ознакомьтесь с pathlib, современным инструментом для работы с файлами.