Загрузка данных



Порядок отладки:

Запустить программу и подать на вход HTML-файл с комментариями, лишними пробелами и атрибутом type="text/css". Проверить что комментарии удалились, пробелы между тегами сократились, а атрибут type исчез. Подать файл с вложенными скриптами — убедиться что содержимое тегов не повреждено. Подать пустой файл — программа должна сообщить об ошибке.

import re
import os

def optimize_html(html):
    """Основная функция оптимизации HTML-кода"""
    
    # 1. Удаление комментариев
    html = re.sub(r'<!--.*?-->', '', html, flags=re.DOTALL)
    
    # 2. Удаление type="text/css" у тега style
    html = re.sub(r'(<style)\s+type=["\']text/css["\']', r'\1', html, flags=re.IGNORECASE)
    
    # 3. Удаление type="text/javascript" у тега script
    html = re.sub(r'(<script)\s+type=["\']text/javascript["\']', r'\1', html, flags=re.IGNORECASE)
    
    # 4. Приведение тегов к нижнему регистру
    def lower_tags(match):
        return match.group(0).lower()
    html = re.sub(r'<[^>]+>', lower_tags, html)
    
    # 5. Удаление пробелов между тегами
    html = re.sub(r'>\s+<', '><', html)
    
    # 6. Удаление лишних пробелов внутри текста
    html = re.sub(r'[ \t]+', ' ', html)
    
    # 7. Удаление пустых строк
    html = re.sub(r'\n\s*\n', '\n', html)
    
    # 8. Удаление пробелов в начале и конце
    html = html.strip()
    
    return html

def optimize_html_file(input_path, output_path=None):
    """Оптимизация HTML-файла"""
    
    if not os.path.exists(input_path):
        print(f"ОШИБКА: Файл '{input_path}' не найден")
        return None
    
    with open(input_path, 'r', encoding='utf-8') as f:
        original = f.read()
    
    if not original.strip():
        print("ОШИБКА: Файл пуст")
        return None
    
    optimized = optimize_html(original)
    
    if output_path is None:
        name, ext = os.path.splitext(input_path)
        output_path = f"{name}_min{ext}"
    
    with open(output_path, 'w', encoding='utf-8') as f:
        f.write(optimized)
    
    original_size = len(original.encode('utf-8'))
    new_size = len(optimized.encode('utf-8'))
    percent = (1 - new_size / original_size) * 100
    
    print("\n" + "="*50)
    print("ОТЧЁТ ОБ ОПТИМИЗАЦИИ HTML")
    print("="*50)
    print(f"Исходный файл:     {input_path}")
    print(f"Оптимизированный:  {output_path}")
    print(f"Исходный размер:   {original_size} байт")
    print(f"Новый размер:      {new_size} байт")
    print(f"Экономия:          {original_size - new_size} байт")
    print(f"Сжатие:            {percent:.2f}%")
    print("="*50)
    
    return optimized

# Запуск программы
if __name__ == "__main__":
    print("=== ПРОГРАММА ДЛЯ ОПТИМИЗАЦИИ HTML-КОДА ===\n")
    
    # Создаём тестовый файл
    test_html = '''<!DOCTYPE html>
<html>
<head>
    <!-- комментарий -->
    <style type="text/css">
        body { background: red; }
    </style>
</head>
<body>
    <h1>   Заголовок   </h1>
    <p>   Текст   с   пробелами   </p>
</body>
</html>'''
    
    with open("test.html", "w", encoding="utf-8") as f:
        f.write(test_html)
    
    # Запускаем оптимизацию
    optimize_html_file("test.html", "test_min.html")