Порядок отладки:
Запустить программу и подать на вход 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")