Skip to content

Weller26/LZW-Archiver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LZW-Archiver

Данный проект был сделан в рамках учебного курса по языку Python.

Описание

Консольная утилита
Архивирует любые файлы (текстовые, бинарные и т.д.) и директории используя алгоритм LZW (Алгоритм Ле́мпеля — Зи́ва — Уэлча)
Параметры ввода:

  • action - действие, которое будет произведено с файлом/директорией:
    • archive (a, arch) - архивация файла/директории
    • dearchive (d, dearch) - деархивация файла с расширением .lzw
  • input_path - путь к файлу/директории, к которой нужно применить действие
  • output_directory (опционально) - путь к директории, в которой будет сохранён выходной файл/директория. По умолчанию: директория, в которой лежит входной файл/директория
  • replacement - флаг, при его наличии после архивации/деархивации входной файл/директория удаляется
  • output_file_name (опционально) - имя выходящего файла. Если параметр не указан, то будет использоваться оригинальное имя файла

Чтобы использовать, необходимо перейти в директорию с проектом и ввести в консоли:
python main.py action input_path
С дополнительными параметрами: python main.py action input_path.ext -s output_directory -r output_file_name

Пример архивации:

  • python main.py archive C:\Users\Username\file.txt -s C:\Users\Username\Archives
    • Результат: в директории Archives будет создан файл file.lzw - сжатый файл file.txt
  • python main.py a C:\Users\Username\dir -s C:\Users\Username\Documents
    • Результат: в директории Documents будет создан архив dir.lzw - архив исходной директории

Пример деархивации:

  • python main.py dearchive C:\Users\Username\Archives\archive.lzw -s C:\Users\Username\Documents dearchive
    • Результат: в директории Documents будет создан файл dearchive.txt - распакованный файл file.lzw
  • python main.py d C:\Users\Username\Archives\dir.lzw -s C:\Users\Username\Dirs
    • Результат: в директорию Dirs будет разархивирована директория dir со всеми её файлами и поддиректориями

Особенности

  • Архиватор использует алгоритм LZW с очищением словаря фраз, когда он достигнет длины 4096, на один код максимум 12 бит
  • Длина кодов увеличивается динамически по мере роста словаря. Изначально словарь заполнен всеми 256 байтами, начальная длина кода - 9 бит. Когда в словаре окажется 512 элементов, длина кодов вырастет до 10 бит, когда окажется 1024 элемента - до 11 бит, когда окажется 2048 элементов - до 12 бит, когда окажется 4096 кодов - словарь сбрасывается до 256 начальных байтов
  • Код 256 зарезервирован, как код очистки словаря. Если словарь переполнен, то кодировщик добавляет код 256 в выходной поток и очищает словарь. Если декодировщик получает код 256, то он обновляет свой словарь
  • При архивации файла в начало архива записывается служебная информация:
    • "магическое число" (сигнатура данных) - 5 байт. Идентификатор формата. Значение: LZW26
    • файл или директория - 1 байт. Необходимо для деархивации. Значение: f или d соответственно
    • длина расширения файла - 1 байт
    • расширение файла - "длина расширения" байт
    • длина имени файла - 2 байта
    • имя файла - "длина имени" байт
    • размер исходного файла - 8 байт. Используется в качестве проверки корректности деархивации: должен совпасть с размером деархивированного файла
    • время создания, изменения и доступа к файлу
    • длина метаданных
    • метаданные (если есть)
  • При архивации файла отображается, сколько процентов размер архива занял от исходного файла
  • Архиву даётся расширение .lzw
  • Архиватор сохраняет метаданные у следующих форматов: mp3, docx, pdf
  • Архиватор считает хэш-код исходного файла и записывает его в конец архива. При деархивации хэш-код разархивированного файла сравнивается с хэш-кодом исходного файла

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages