gannicus.ЗАПИСКИ ПРОГРАММИСТА
Практика

Total Commander: маски файлов и объединение TXT

Две задачи из рабочей памятки: выбрать именно BMP, а не всё остальное, и собрать текстовые части в заданном порядке.

В этой записи
  1. Сначала точно сформулируйте выбор
  2. Проверка на копии каталога
  3. Зачем нужны Ctrl+B и фильтры
  4. Вторая задача: несколько TXT в одном файле
  5. Пример для небольших UTF-8-файлов
  6. Проверка объединения

Сначала точно сформулируйте выбор

«Найти BMP-файлы» и «найти всё, кроме BMP» — противоположные задачи. В прежней памятке заголовок обещал первую, а маска |*.bmp выполняла вторую. При последующем удалении это могло затронуть совсем другие файлы.

Включение и исключение в поисковой маске
МаскаЧто означаетПример для проверки
*.bmpИмена с расширением BMPphoto.bmp должен попасть в результат
|*.bmpИсключить BMPnotes.txt может остаться, а photo.bmp исключается
Две группы файлов: маска *.bmp выбирает BMP, маска |*.bmp исключает их и оставляет другие расширения
Перед действием смотрите не только число результатов, но и ожидаемые имена в выбранной группе.

Проверка на копии каталога

  1. Сделайте маленькую копию дерева с несколькими файлами: один BMP, один TXT и вложенная папка с ещё одним BMP.
  2. Откройте поиск через Alt+F7 и укажите корень этой копии. Убедитесь, что поиск охватывает нужные подпапки.
  3. Введите *.bmp и начните поиск. В примере ожидаются два BMP; TXT не должен попасть в результат.
  4. Просмотрите пути. Не выбирайте одноимённую папку вместо файла и не работайте со всем диском, когда нужна одна директория.
  5. При необходимости выведите результаты в файловую панель через «Файлы на панель» / Feed to listbox. Ещё раз проверьте список до перемещения или удаления.

Чтобы понять обратную маску, повторите поиск с |*.bmp и сравните группы. Не пробуйте выяснять смысл маски первым же массовым удалением оригиналов. Сохраните копию до проверки результата выбранного действия.

Зачем нужны Ctrl+B и фильтры

Представление файлов из подпапок удобно, но меняет привычный вид каталога. Фильтр видимости и выделение для операции — не одно и то же. Перед действием проверьте, какие имена выделены, где они лежат и что именно будет обработано. Набор горячих клавиш может быть изменён пользователем или готовой сборкой: ориентируйтесь и на подписи команд.

Вторая задача: несколько TXT в одном файле

В дополнении от 14 ноября 2017 года возникла другая задача — собрать пронумерованные текстовые файлы в один. Сначала определите, что лежит в папке: части одного ранее разделённого файла или самостоятельные текстовые документы. У восстановления частей и объединения документов разные требования.

Для самостоятельных TXT важны:

  • Порядок. При обычной строковой сортировке 1.txt, 10.txt, 2.txt не дают порядок один–два–десять. Удобнее заранее выбрать одинаковую длину номера или явно перечислить файлы.
  • Кодировка. Смешивание UTF-8 и старой Windows-кодировки простой склейкой не исправляет символы.
  • Границы. Если первая часть не заканчивается переводом строки, её последняя строка может слиться с первой строкой следующей.
  • Результат. Выходной файл не должен попадать обратно в шаблон входных файлов.

Пример для небольших UTF-8-файлов

Если нужен предсказуемый текстовый результат и установлен Python 3, можно перечислить части явно. Пример читает их до создания результата; ошибка чтения остановит работу без перезаписи исходников.

from pathlib import Path

# Только небольшие UTF-8-файлы, названия перечислены явно.
parts = [Path("001.txt"), Path("002.txt"), Path("003.txt")]
texts = [part.read_text(encoding="utf-8-sig") for part in parts]
result = "\n".join(text.rstrip("\r\n") for text in texts) + "\n"

# Режим x не перезапишет существующий файл.
with Path("result.txt").open("x", encoding="utf-8", newline="\n") as target:
    target.write(result)

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

Проверка объединения

Откройте начало и конец результата, проверьте каждую границу частей и кириллицу. Убедитесь, что порядок совпал с выбранным списком. Исходные файлы оставьте до завершения проверки. Команда copy *.txt RESULT.txt из старой заметки сама по себе не объясняет ни порядок, ни кодировку, ни правила разделения строк.

Справка: поиск и маски Total Commander; Python — режимы открытия файлов.