Список файлов расшифровки через Python pathlib: как проверить комплект проекта
CSV-опись папки с относительными путями, размерами и временем изменения в UTC. Как обнаружить пропущенный файл и не спутать размер с подтверждением версии.
Сначала запишите, что должно быть в комплекте
Опись нужна, когда в проекте накопились несколько интервью, таблицы реплик, субтитры и проверенные редакции. Просмотр папки по памяти легко пропускает один материал. CSV-список даёт компактную точку сверки и позволяет сохранить состояние набора на дату проверки.
Перед запуском запишите ожидаемый состав отдельно: например, три интервью, три текста и общая таблица цитат. Автоматический список показывает то, что уже есть на диске. Он не способен догадаться, что отсутствующее интервью тоже должно было войти в передачу.
Подготовьте отдельную project-texts без посторонних материалов. Для основы текста используйте расшифровку аудио. Понятные имена и версии важны ещё до формирования списка.
Выберите поля описи и единицы
Путь сохраняется относительно project-texts. Поэтому I12/transcript.txt и I13/transcript.txt различимы, хотя имя файла одинаковое. Полный путь компьютера здесь не требуется и не попадает в колонку path.
bytes — фактический размер файла в байтах, а не число слов или длительность записи. modified_utc — время изменения по данным файловой системы, переведённое в UTC. Это не дата интервью и не доказательство момента редакторского согласования.
В примере включаются все обычные файлы и вложенные папки; символические ссылки-файлы исключены. Используйте обычную подготовленную структуру без ссылочных каталогов. Если нужен только конкретный тип экспорта, задайте отбор расширений отдельно и запишите правило.
Сохраните список без изменения исходных файлов
Сохраните код как list_project.py рядом с project-texts. Выполните python list_project.py или python3 list_project.py. Появится manifest-v01.csv, который можно открыть текстовым редактором или импортировать в таблицу.
from pathlib import Path
from datetime import datetime, timezone
import csv
root = Path("project-texts")
rows = []
for path in sorted(root.rglob("*")):
if path.is_file() and not path.is_symlink():
info = path.stat()
rows.append({
"path": path.relative_to(root).as_posix(),
"bytes": info.st_size,
"modified_utc": datetime.fromtimestamp(
info.st_mtime, timezone.utc).isoformat()
})
if not rows:
raise ValueError("Файлов нет: проверьте папку")
with Path("manifest-v01.csv").open(
"x", encoding="utf-8-sig", newline=""
) as saved:
writer = csv.DictWriter(saved,
fieldnames=["path", "bytes", "modified_utc"])
writer.writeheader()
writer.writerows(rows)
print("Файлов в списке:", len(rows))
CSV открывается в режиме "x", поэтому существующая опись не перезаписывается. Для следующей проверки задайте новое имя версии. utf-8-sig добавляет метку UTF-8 у CSV, а newline="" передаёт обработку строк CSV-модулю.
На время обхода завершите редактирование папки. Список не является мгновенным снимком файловой системы: если документы меняются во время работы, строки могут относиться к разным моментам.
Разберите отсутствующие и подозрительные материалы
Сравните каждую ожидаемую позицию со списком path. Проверьте лишние старые редакции, пустые файлы с bytes = 0 и одинаковые имена в неожиданной папке. Затем откройте контрольные документы: наличие строки в описи не гарантирует читаемую расшифровку.
Не называйте два файла одинаковыми только по размеру. Одно заменённое слово способно оставить то же количество байтов. Для содержания TXT используйте сравнение двух версий, а при проверке структуры таблицы — отдельный CSV-разбор.
Когда комплект подтверждён, его можно упаковать и проверить как ZIP. Опись сохраните рядом как описание состава. Не заменяйте ею сами тексты или исходные аудиозаписи.
Учебный пример: три строки описи
Вымышленный комплект помогает заметить пустую копию и сохранить различие между одинаковыми именами.
| path | bytes | Действие |
|---|---|---|
| I12/transcript.txt | 18420 | Открыть контрольную реплику |
| I13/transcript.txt | 0 | Выяснить причину пустого файла |
| quotes.csv | 3200 | Проверить структуру таблицы |
Если файл пропущен, сначала выясните, в какой папке находится согласованная версия. Не копируйте случайную старую редакцию только ради заполнения списка.
Проверка комплекта по описи
Проект: [название] Папка обхода: [путь] Опись: [имя CSV] Время проверки: [дата и пояс] Ожидаемые материалы: [список] Пропуски: [позиции] Пустые файлы: [пути] Лишние редакции: [пути] Проверено содержание: [контрольные файлы] Итоговый комплект: [версия]
Частые вопросы
Размер в байтах показывает число слов?
Нет. Это объём файла. Число слов требует отдельного правила подсчёта текста.
modified_utc — дата записи интервью?
Нет. Это время изменения файла по данным файловой системы, представленное в UTC.
Список автоматически найдёт недостающий текст?
Он покажет фактические файлы. Пропуск определяется сравнением с заранее заданным комплектом.
Опись подтверждает одинаковое содержание копий?
Нет. Для этого нужна отдельная проверка содержимого, а не только размера и времени.