Большая TXT-расшифровка в Python: как проверить начало и конец построчно
Просмотр первых и последних строк через islice и deque без read всего файла. Как проверить окончание экспорта, сохранить номера строк и учитывать ограничения.
Выберите, что именно нужно проверить
Длинный TXT иногда неудобно открывать целиком в редакторе. Перед дальнейшей обработкой полезно проверить, что файл начинается ожидаемым интервью, содержит нормальные русские символы и заканчивается последней репликой, а не обрывается посреди слова.
Пять строк — учебный размер просмотра. Выберите столько, сколько нужно для контекста. Одна строка может содержать несколько предложений, а одна реплика — несколько физических строк. Поэтому этот просмотр не заменяет содержательной проверки всей расшифровки.
Если экспорт ещё готовится, получите основу через расшифровку аудио. Сохраните имя и версию проверяемого TXT, чтобы контрольные строки относились к конкретному файлу.
Читайте поток вместо создания полного списка
Для первых строк используется islice(opened, 5). Он берёт до пяти элементов текстового потока, не требуя предварительного read(). Для конца deque(maxlen=5) хранит только последние пять прочитанных строк вместе с их номерами.
Чтобы получить последние строки этим способом, код проходит весь файл. Это ограничение времени ввода, а не ошибка реализации. Он также хранит текущую строку: если весь TXT состоит из одной огромной строки, расход памяти всё равно зависит от её длины.
Не называйте метод случайным доступом к концу файла. Произвольный переход в UTF-8 по байтовой позиции требует учёта границ символов и строк; учебный последовательный обход избегает этой сложности.
Запустите контроль начала и конца
Сохраните скрипт как inspect_text.py рядом с transcript.txt и выполните python inspect_text.py или python3 inspect_text.py. Файл предполагается в UTF-8 с необязательной меткой BOM. Другие кодировки отдельно уточняются.
from pathlib import Path
from itertools import islice
from collections import deque
source = Path("transcript.txt")
print("Первые 5 строк:")
with source.open(encoding="utf-8-sig") as opened:
for number, line in enumerate(islice(opened, 5), start=1):
print(number, line.rstrip("\r\n"))
tail = deque(maxlen=5)
count = 0
with source.open(encoding="utf-8-sig") as opened:
for count, line in enumerate(opened, start=1):
tail.append((count, line.rstrip("\r\n")))
print("Всего физических строк:", count)
print("Последние 5 строк:")
for number, line in tail:
print(number, line)
Первый блок печатает начало, второй — число физических строк и хвост. Нумерация начинается с 1. rstrip(" ") убирает только окончания при выводе; пробелы и другие символы реплики не удаляются этим выражением.
Если строк меньше пяти, очередь содержит доступные строки. Для пустого файла счётчик остаётся 0. Если при полном проходе возникает ошибка декодирования, не скрывайте её через errors="ignore": выясните кодировку или повреждение.
Отличите завершённый файл от завершённой записи
Сопоставьте последнюю показанную реплику с концом исходного аудио. Читаемый TXT может быть технически завершён, но содержать только первую часть интервью. Отсутствие ошибки чтения не доказывает полноту распознавания.
Проверьте наличие ожидаемого финального таймкода или прощания, если они действительно есть в записи. Не придумывайте обязательное заключение: разговор мог закончиться без него. Контроль должен опираться на исходный файл и известную длительность.
Для дальнейшего поиска по архиву используйте SQLite FTS5. Если структура времени вызывает сомнение, отдельно проверьте формат и порядок TXT-меток. Просмотр границ решает более узкую задачу — первичную проверку экспорта.
Учебный пример: короткий и длинный файл
Вымышленные файлы показывают, как очередь последних строк ведёт себя при разном объёме.
| TXT | Начало | Конец |
|---|---|---|
| 3 строки | Строки 1–3 | Те же строки 1–3 |
| 20 строк | Строки 1–5 | Строки 16–20 |
| Пустой файл | Нет строк | Счётчик 0 |
Если конец подозрительно короткий, сохраните наблюдение и проверьте исходную запись. Не дописывайте предполагаемую реплику ради завершённого вида текста.
Проверка границ TXT
Файл и версия: [имя] Кодировка: [подтверждённая] Размер просмотра: [строк] Первая реплика: [цитата] Последняя реплика: [цитата] Физических строк: [число] Конец аудио проверен: [таймкод] Экспорт полный: [основание] Спорные места: [список]
Частые вопросы
Код читает только последние пять строк?
Он хранит только пять последних, но для их получения проходит файл целиком.
Пять строк равны пяти репликам?
Нет. Разбиение на физические строки зависит от оформления TXT.
Память всегда постоянная независимо от файла?
Очередь ограничена числом строк, но очень длинная отдельная строка всё равно требует памяти.
Успешное чтение доказывает полный экспорт?
Нет. Проверьте последнюю реплику и охват по исходной аудиозаписи.