ТранскрибаторТранскрибатор
Практическая инструкция

Расшифровка в CSV: как сохранить кавычки, запятые и переносы через Python

Как перенести реплики в CSV через модуль csv Python: поля, UTF-8, кавычки, переносы внутри текста и проверка обратного чтения. Учебный пример.

Транскрибатор
ЗАПИСЬПЛАН РАБОТЫЗадайте поляЗапишите через csvПрочитайте обратноПроверить результатОТ СЛОВ К РЕЗУЛЬТАТУ
Работа с реальной записьюНаглядный учебный примерШаблон для копирования
1Задайте поля2Запишите через csv3Прочитайте обратно
Сначала сохраните источник, затем выполните преобразование и проверьте результат по записи.

Определите единицу строки и набор полей

CSV удобен, когда расшифровку нужно передать в таблицу или собственную систему анализа. Сначала решите, чему соответствует одна запись: отдельной реплике, абзацу или выбранной цитате. Не меняйте это правило посреди одного файла без явного признака типа строки.

Получите текст аудио и подготовьте поля: id, timecode, speaker, text. Идентификатор нужен для устойчивой ссылки, время — для возвращения к записи, метка участника — для группировки. Не выводите личность человека из технической метки вроде У01.

Сохраняйте таймкод строкой в исходном формате. В CSV нет собственного типа времени, а табличный редактор может автоматически изменить отображение. Это отдельная проблема импорта; корректный CSV не гарантирует, что программа получателя выбрала нужный тип колонки.

Поручите кавычки стандартному модулю

В Python модуль csv умеет записывать поля с разделителями, кавычками и переносами. Откройте файл для записи с encoding="utf-8" и newline="". Передайте список полей в writer, не формируйте строку через ",".join(...).

Если текст содержит запятую, модуль заключит нужное поле в кавычки. Внутренняя двойная кавычка обрабатывается по правилам выбранного диалекта. Это часть структуры файла, а не новая пунктуация реплики. После корректного чтения возвращается исходное значение.

В шаблоне ниже используется DictWriter с четырьмя колонками и стандартным разделителем — запятой. Если получателю нужен другой разделитель, задайте его явно при записи и чтении. Не полагайтесь на то, что любая программа угадает диалект.

Не считайте физические строки числом реплик

Внутри одного текстового поля может находиться перенос строки. Корректный CSV сохраняет его внутри записи в кавычках. Поэтому файл с двумя репликами способен занимать больше трёх физических строк с учётом заголовка.

Прочитайте результат через DictReader с теми же правилами разделения. Сравните количество записей, названия колонок и значения поля text. Особое внимание уделите строкам с запятыми, кавычками и переносами: именно они обнаруживают ошибку ручной склейки.

Если текст открывается в одной колонке, сначала проверьте выбор разделителя в программе импорта. Если кавычки остаются как лишние символы внутри значения, убедитесь, что файл читается CSV-парсером, а не простым разделением каждой строки по запятой.

Проверьте содержимое после переноса в таблицу

Откройте CSV в целевой программе и проверьте таймкод, метку участника и текст отдельно. Найдите последнюю запись и убедитесь, что всё содержание сохранилось. Внешне правильное число колонок не показывает, что редактор не преобразовал значение автоматически.

Сравните несколько реплик с исходником, включая отрицания и числа. Для содержательных редакций пригодится проверка смысла изменений. Перенос формата должен оставаться отделённым от сокращения разговора.

CSV — текстовая таблица без истории обсуждений, оформления и аудио. Если команда передаёт также запись, укажите связь через идентификатор исходника в отдельной карточке. Создание файла csv не делает его готовым архивом всей встречи.

Учебный пример

Учебный пример: проверка на коротком фрагменте

Ниже вымышленная запись. Имена, время и содержание нужны только для объяснения порядка работы.

ПолеУчебное значениеПроверка
timecode00:01:20Сохранить как текст
speakerУ01Это метка, не проверенное имя
textСказал: «Да, но позже».Кавычки и запятая не разбивают поле
timecode00:01:20Сохранить как текстspeakerУ01Это метка, не проверенное имяtextСказал: «Да, но позже».Кавычки и запятая неразбивают поле
Каждая контрольная точка связана с конкретным результатом; отсутствие подтверждения оставляйте открытым вопросом.

Повторите проверку на своей копии записи. Учебные значения не описывают Ваш файл и не подтверждают качество всей расшифровки.

Заготовка для собственной проверки

Рабочая заготовкаВыделите и скопируйте
import csv

rows = [
    {"id": "r1", "timecode": "00:01:20", "speaker": "У01",
     "text": 'Сказал: "Да, но позже".'},
    {"id": "r2", "timecode": "00:01:25", "speaker": "У02",
     "text": "Первая строка\nУточнение"},
]
fields = ["id", "timecode", "speaker", "text"]
with open("transcript.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=fields)
    writer.writeheader()
    writer.writerows(rows)
with open("transcript.csv", encoding="utf-8", newline="") as f:
    restored = list(csv.DictReader(f))
assert restored == rows

Частые вопросы

Можно склеить поля через запятую?

Не для произвольного текста: запятые и кавычки внутри реплики нарушат такую схему.

Почему число строк не совпадает с числом реплик?

Внутри поля может быть перенос строки; считайте записи через CSV-парсер.

UTF-8 сохраняет русский текст?

Да, при соответствующем чтении. Выбор кодировки в программе импорта тоже важен.

CSV хранит время как специальный тип?

Нет. Типы интерпретирует программа получателя.