TXT-расшифровка в HTML через Python: как сохранить текст и специальные символы
Локальная HTML-копия расшифровки с переносами строк и читаемым оформлением. html.escape, UTF-8 и проверка символов «<», «>» и «&» без изменения исходного TXT.
Определите назначение HTML-копии
HTML удобен, если расшифровку нужно читать в браузере с нормальной шириной строки и без текстового редактора. Можно подготовить локальную копию для просмотра одного файла, сохранив исходный TXT как рабочую основу.
Эта инструкция не добавляет поиск по архиву, интерактивные таймкоды или автоматическое оглавление. Она решает одну задачу: показать готовый текст и сохранить его символы. Для нескольких документов сначала удобнее поиск по папке TXT.
Подготовьте проверенный transcript.txt. Если текста ещё нет, используйте расшифровку аудио, затем сверяйте спорные реплики с записью. Красивое представление не исправляет ошибку распознавания.
Экранируйте текст перед вставкой
В HTML знак «<» начинает разметку, а «&» участвует в записи символьных ссылок. Если реплика содержит «a < b» или название «A&B», прямое вставление способно изменить отображение. html.escape преобразует специальные символы в последовательности для текстового представления.
В примере функция применяется к тексту и имени файла, показанному в заголовке. Не называйте это универсальной очисткой любых HTML, URL и скриптов: здесь текст вставляется в обычный текстовый контекст страницы.
Исходник не перезаписывается. Переносы сохраняются в отдельном блоке через white-space: pre-wrap, а overflow-wrap позволяет длинной строке переноситься по ширине. Это правила отображения, а не редактирование содержания реплик.
Создайте отдельный HTML-файл
Сохраните скрипт как make_view.py рядом с transcript.txt. Запустите python make_view.py или python3 make_view.py. Используются только pathlib и html из стандартной библиотеки Python.
from pathlib import Path
from html import escape
source = Path("transcript.txt")
output = Path("transcript-view.html")
text = source.read_text(encoding="utf-8-sig")
title = escape(source.name)
body = escape(text)
page = f"""<!doctype html>
<html lang="ru"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>{title}</title>
<style>
body {{max-width:900px;margin:40px auto;padding:0 20px;
font:18px/1.7 Arial,sans-serif;color:#23324b;}}
.transcript {{white-space:pre-wrap;overflow-wrap:anywhere;}}
</style></head><body><h1>{title}</h1>
<div class="transcript">{body}</div></body></html>"""
with output.open("x", encoding="utf-8") as saved:
saved.write(page)
print(output)
Файл открывается на запись в режиме "x": существующая HTML-копия не перезаписывается. Для новой версии задайте другое имя output. utf-8-sig у входа поддерживает UTF-8 с необязательной меткой BOM; другую кодировку нужно определить отдельно.
Откройте полученный файл обычным браузером. Код не отправляет данные на сайт и не загружает внешние шрифты или сценарии. Чтобы опубликовать такую страницу, нужен отдельный процесс размещения и проверки.
Сверьте текст, а не только внешний вид
Проверьте первую и последнюю реплики, несколько таймкодов и фразу со специальными символами. Вымышленный тест «a < b & c > d» должен отображаться именно так, без пропущенной части. Если в тексте встретилось буквальное «», оно должно оставаться текстом, а не делать соседнюю реплику жирной.
Выделите контрольную фразу в браузере и сравните с TXT. Проверьте перенос длинного слова и просмотр на доступных размерах окна. Не считайте локальную проверку одного большого экрана проверкой мобильного отображения.
Для обсуждения правок двух текстовых версий используйте отчёт difflib. Читательская HTML-копия показывает одну версию и не отмечает изменения между файлами.
Учебный пример: символы остаются текстом
Вымышленные реплики помогают проверить, не стали ли символы содержимого частью HTML-разметки.
| В TXT | В HTML-исходнике | На экране |
|---|---|---|
| a < b | a < b | a < b |
| A&B | A&B | A&B |
| <b> — часть цитаты | <b> — часть цитаты | <b> — часть цитаты |
Не заменяйте вручную только один знак: используйте библиотечную функцию для всего текстового блока и проверяйте контрольные случаи.
Проверка HTML-копии
Исходный TXT: [имя и версия] HTML-копия: [имя] Кодировка: [UTF-8] Первая реплика: [проверена] Последняя реплика: [проверена] Символы < > &: [проверены] Длинная строка: [переносится] Окна просмотра: [фактически проверенные] Назначение: [локальный просмотр]
Частые вопросы
html.escape меняет исходный TXT?
Нет. В примере он преобразует строку для отдельного HTML-представления.
Почему в HTML-коде видно <?
Это последовательность, с помощью которой браузер показывает знак «<» как текст.
Файл уже опубликован в интернете?
Нет. Скрипт создаёт локальный файл. Размещение в интернете — отдельное действие.
HTML-копия показывает изменения между версиями?
Нет. Для сравнения двух TXT используйте отдельный отчёт о правках.