Skip to content

dumbledore/Python-LZW-Compressor

Repository files navigation

Общо за проекта

Проектът реализира алгоритъма за компресия LZW, като се полза 64K или 16MB речник. При запълване речникът се изпразва и пълни наново.

Проектът е разработен от Светлин Анков

Структура на проекта

compress

Реализира компресията. Изпълнява се чрез извикване като метод или от command prompt-а. При извикване без параметри ще даде хелп.

  • process_command_line(arguments, automated = False) – Обработва аргументите от CMD
  • compress(file_in, file_out, buffer_size, large_dict) – Инициализира компресията
  • compress_more(f, o, buffer_size, dict_size_large, flen, read_overall, t) – Реализира самата компресия. Работи докато речника се запълни или входния буфер се запълни. Викан многократно от compress докато файлът бъде прочетен. При всяко извикване речникът се прави наново.
  • output_code_for_pattern_to_disc(buffer_writer, position, o) – Записва output буфера на диска.
  • output_code_for_pattern(buffer_writer, position, code, large_dict) – Записва код в текущия буфер.

decompress

Реализира декомпресията. Изпълнява се чрез извикване като метод или от command prompt-а. При извикване без параметри ще даде хелп.

  • process_command_line(arguments, automated = False) – Обработва аргументите от CMD
  • decompress(file_in, file_out, buffer_size, large_dict) – Инициализира декомпресията. Проверява дали файлът започва с магическия код, ако не хвърля ArchiveError.
  • decompress_more(f, o, buffer_size, dict_size_large, flen, read_overall, t) – Реализира самата декомпресия. Работи докато няма повече за четене или е прочетена команда „FLUSH DICTIONARY“. Викан многократно от decompress докато файлът бъде прочетен. При всяко извикване речникът се прави наново.
  • def get_input_code(f, large_dict) – Прочита един (дву или три байтов) код.
  • def output_pattern_for_code(o, pattern) – За момента просто записва шаблон на диска.

constants

Съдържа константи ползвани при декомпресията и компресията.

compare_files

Сравнява файлове байт по байт. Използва се от Unit тестовете.

test_*

Тестове

  • test_compression_basic – Тества със случайни изрязъци от wiki.xml-а. Общо взето занимава се с малка файлове
  • test_compression_additional – Допълнителен тест върху файлове от различни типове.
  • test_compression_wiki – Тест за компресия на BG WikiDUMP, като ползва най-тежките настройки. Освен Sanity Check, проверява дали е достигнато изисканото ниво на компресия (30%)
  • test_bad_file – Пробва да зададе на декомпресора файл, който не е от LZW формат.
  • testdata\

    Данните за тестовете

    doc\

    Тази докемунтация

    About

    A simple LZW compressor written in Pyhton. It's not very practical considering speed and memory usage, but can be instructive in some ways.

    Resources

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Languages