Как проверить расширение файла в программе: решение
Быстрый ответ
Функция os.path.splitext()
в Python дает возможность разделить имя файла на основную часть и расширение:
import os
# Получаем расширение файла 'example.txt' или 'final_draft_v2_FINAL.txt'
print(os.path.splitext('example.txt')[1]) # Результат: .txt
Этот способ простой и эффективный для извлечения только расширения файла.
Ниже представлены улучшения для проверки расширения файла с учетом регистра и обработки нескольких расширений:
filename = 'example.TXT'
extension = os.path.splitext(filename)[1].lower() # Преобразование в нижний регистр
if extension == '.txt':
print("Обнаружен TXT файл. Источник данных.")
elif extension in ('.jpg', '.jpeg', '.png'):
print("Обнаружен графический файл!")
Извлечение расширения с помощью pathlib
Модуль pathlib
предлагает более современный и понятный способ работы с файлами в Python:
from pathlib import Path
# Определение расширения файла с использованием pathlib
file_path = Path('example.txt')
if file_path.suffix.lower() == '.txt':
print(f"Файл {file_path.name} может содержать неожиданные данные.")
Модуль pathlib
позволяет разделить файлы и каталоги, исключая возможную ошибку чтения директории как файла.
Поиск по шаблону с помощью fnmatch
Для поиска файлов с рядом однотипных расширений можно использовать модуль fnmatch
и его функцию поиска по шаблонам:
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print(f"{file} – Внимание, обнаружен текстовый документ!")
Визуализация
Расширение файла можно рассматривать как его "специфику":
Допустим, у нас есть файл `data.2022.report.xlsx`.
[data][2022][report][📊 xlsx]
Последняя часть указывает на особенности файла:
... [📊 xlsx] – Как вы уже догадались, это таблица Excel!
Распознавание шаблонов с помощью glob
С помощью модуля glob
можно легко найти файлы определенного расширения, включая поиск в подкаталогах:
import glob
# Поиск всех текстовых файлов в текущей директории
text_files = glob.glob('*.txt')
for file in text_files:
print(f"{file}: Почему велосипед не может стоять самостоятельно? Ему некогда.")
Обработка типов файлов с применением умного подхода
Для оптимизации кода и избавления от громоздких конструкций if-elif
при обработке разнообразных типов файлов можно использовать следующий подход:
file_ext_actions = {
'.txt': process_text_file, # Обработчик текстовых документов
'.jpg': process_image_file, # Обработчик файлов JPEG
'.png': process_image_file, # Обработчик файлов PNG
'.pdf': process_pdf_file, # Обработчик PDF-документов
}
file_ext = os.path.splitext('example.txt')[1] # Определение типа файла
action = file_ext_actions.get(file_ext.lower()) # Выбор соответствующего действия ...
if action:
action() # Выполняем соответствующую обработку
else:
print("Указанный тип файла не поддерживается. Возможно, необходимы дополнительные расширения?")
Так, определенные функции могут обрабатывать файлы в зависимости от их расширения.
Полезные материалы
- Документация Python os.path.splitext — Официальное руководство по работе с файловыми путями в Python.
- Документация Python pathlib.Path — Руководство по использованию модуля pathlib в Python.
- Работа с файлами в Python – Real Python — Развернутое описание методов работы с файлами в Python от Real Python.
- Работа с CSV-файлами в Python – GeeksforGeeks — Полезные рекомендации для работы с CSV в Python.
- Типы медиа — Справочник медиатипов и файловых расширений.
- Python Tutorial: File Objects – Reading and Writing to Files – YouTube — Видеоурок по чтению и записи файлов в Python.
- GitHub – ahupp/python-magic: Обертка для libmagic на Python — Библиотека Python для определения типов файлов не только по расширению, но и по содержимому.