Skip to content

Лекція 22. Стиснення та архіви

Лекція 22. Стиснення та архіви

Section titled “Лекція 22. Стиснення та архіви”

Рівень 4: Хранитель файлів

Марко, сьогодні ми не просто вивчимо новий термін — ми відкриємо ще один шар того, як насправді працює комп’ютер.

Що ми сьогодні розкриємо

Section titled “Що ми сьогодні розкриємо”
  • розрізняти архівування і стиснення
  • створювати та розпаковувати прості ZIP-архіви
  • експериментально порівнювати, які дані стискаються краще

Зв’язок з попередніми лекціями

Section titled “Зв’язок з попередніми лекціями”

У цій лекції ми використаємо знання про файли з лекції 17, щоб навчитися архівувати та стискати їх.

Архів — коробка для кількох файлів

Section titled “Архів — коробка для кількох файлів”

Архів об’єднує багато файлів і папок в один контейнер. Це зручно для перенесення, резервної копії або надсилання.

Стиснення — окрема ідея: зробити представлення компактнішим. ZIP зазвичай поєднує обидві функції: пакує кілька файлів і стискає їх.

Повтори стискаються добре

Section titled “Повтори стискаються добре”

Текст із великою кількістю повторів часто легко стискати. Уже стиснуті формати — JPEG, MP4, деякі інші — можуть стискатися ZIP значно слабше, бо багато очевидної надлишковості вже прибрано.

Без втрат означає точне відновлення

Section titled “Без втрат означає точне відновлення”

Коли ти розпаковуєш ZIP із Python-кодом, кожен байт має повернутися точно таким самим. Інакше програма може зламатися. Це lossless compression — стиснення без втрат.

Файл із тисячами однакових A зазвичай стискається дуже добре.

JPEG-фото вже використовує власне стиснення, тому ZIP не обов’язково зменшить його в рази.

Архів project.zip може містити main.py, README.md і папку data/ в одному файлі.

Linux-лабораторія: експеримент із ZIP

Section titled “Linux-лабораторія: експеримент із ZIP”
Terminal window
mkdir -p ~/marko-lab/compress
cd ~/marko-lab/compress
python3 - <<'PYCODE'
print('A' * 10000, file=open('repeats.txt','w'))
PYCODE
ls -lh repeats.txt
zip repeats.zip repeats.txt
ls -lh repeats.txt repeats.zip
mkdir unpacked
unzip repeats.zip -d unpacked
cmp repeats.txt unpacked/repeats.txt && echo 'Файли однакові'

cmp нічого не друкує, якщо файли однакові; ми додаємо повідомлення після успіху.

Виконай місію по черзі. Якщо щось не виходить — спочатку перечитай приклад вище й спробуй знайти, на якому кроці результат відрізняється.

  1. виконай ZIP-експеримент
  2. створи другий текстовий файл з менш повторюваним текстом і порівняй ступінь стиснення
  3. запакуй обидва текстові файли в один архів
  4. розпакуй у нову папку й перевір cmp хоча б для одного файлу
  5. поясни різницю між «архівувати» і «стиснути»
  • Що робить архів?
  • Що таке lossless compression?
  • Чому повторювані дані часто стискаються добре?
  • Чому JPEG може погано додатково стискатися ZIP?
  • Якими командами ми створювали і розпаковували ZIP?
  • Архів — одна «коробка», у якій зібрані багато файлів і папок.
  • Стиснення — зробити ті самі дані компактнішими.
  • Lossless compression (без втрат) — стиснення, що відновлює дані точно (ZIP).
  • Надлишковість — повтори й закономірності, які можна прибрати під час стиснення.
  • zip / unzip — команди пакування та розпакування архівів.
  • cmp — команда порівняння двох файлів байт за байтом.

Чек-лист перед наступною лекцією

Section titled “Чек-лист перед наступною лекцією”
  • Чи можеш ти пояснити різницю між архівацією та стисненням?
  • Чи вмієш ти створювати та розпаковувати архіви за допомогою zip та unzip?
  • Чи розумієш ти, навіщо потрібні архіви для зберігання та передачі файлів?

Що потрібно винести з лекції

Section titled “Що потрібно винести з лекції”
  • архівування збирає файли разом, стиснення зменшує представлення
  • ZIP часто робить і те, й інше
  • експеримент з розміром файлів допомагає зрозуміти стиснення краще за сухе визначення

Хакерський принцип: не запам’ятовуй магічні слова. Намагайся пояснити своїми словами, що відбулося і чому.