Форматы файлов
Формат файла — соглашение о том, как данные закодированы внутри файла, чтобы программа могла их правильно прочитать и записать.
Что такое формат файла
Формат файла — соглашение о том, как данные закодированы внутри. Для диска любой файл — просто последовательность байтов; смысл этим байтам придаёт формат: где заголовок, где данные, каким алгоритмом сжато.
Расширение (.png, .csv) — всего лишь подсказка имени файла, а не сам формат. Переименовать photo.jpg в photo.png не превратит его в PNG. Реальный тип определяют по сигнатуре — первым байтам файла (magic bytes):
file image.png
# image.png: PNG image data, 1920 x 1080, 8-bit/color RGBA, non-interlaced
xxd -l 8 image.png
# 00000000: 8950 4e47 0d0a 1a0a .PNG....
PNG — что это
PNG (Portable Network Graphics) — растровый формат изображений со сжатием без потерь, опубликованный в 1996 году. Создавался как замена GIF, на который тогда распространялись патентные ограничения алгоритма LZW.
Ключевые свойства:
- Без потерь. Сохранили, открыли, пересохранили — байты пикселей те же. Качество не деградирует от пересохранений, в отличие от JPEG.
- Альфа-канал. Полноценная прозрачность с 256 градациями (у GIF прозрачность была бинарной).
- Сжатие DEFLATE — тот же алгоритм, что в zip и gzip.
- Сигнатура
89 50 4E 47 0D 0A 1A 0A— байты 2–4 читаются какPNG. - Не поддерживает анимацию в базовом стандарте (это расширение APNG) и не поддерживает CMYK — для печати не годится.
PNG отлично жмёт то, где много одинаковых пикселей: скриншоты, логотипы, схемы, текст, графики. И плохо — фотографии: там у каждого пикселя свой оттенок, повторов нет, и PNG-файл фотографии выйдет в 5–10 раз тяжелее JPEG при неотличимой на глаз разнице.
Форматы изображений
| Формат | Сжатие | Прозрачность | Где уместен |
|---|---|---|---|
| PNG | Без потерь | Да, альфа-канал | Скриншоты, логотипы, графика с текстом |
| JPEG | С потерями | Нет | Фотографии |
| WebP | Оба режима | Да | Веб — обычно легче PNG и JPEG |
| AVIF | Оба режима | Да | Веб, сжимает сильнее WebP |
| GIF | Без потерь, 256 цветов | Бинарная | Только простая анимация |
| SVG | Вектор, текст | Да | Иконки, логотипы, любой масштаб |
Правило выбора: фотография — JPEG или WebP; графика с резкими краями и текстом — PNG; иконки и логотипы — SVG.
CSV — что это за формат
CSV (Comma-Separated Values) — текстовая таблица: строка файла = строка таблицы, значения разделены запятыми. Первая строка обычно содержит заголовки.
id,name,amount
1,"Иванов, Пётр",1500
2,Петров,2300
Формат описан в RFC 4180, но на практике соблюдается плохо, и отсюда все проблемы: в русской локали разделителем часто становится ; (потому что запятая занята под десятичную дробь), кодировка гуляет между UTF-8 и Windows-1251, а значения с запятой внутри требуют кавычек. Поэтому парсинг CSV регулярным выражением — плохая идея; берите готовую библиотеку (csv в Python, pandas).
Плюсы: читается глазами, открывается везде, легко генерируется. Минусы: нет типов (всё строки), нет схемы, большие файлы читаются медленно.
Форматы данных
| Формат | Тип | Сильная сторона | Слабая сторона |
|---|---|---|---|
| JSON | Текст | Стандарт для API | Многословен, нет комментариев |
| YAML | Текст | Читаемость, конфиги | Значимые отступы, коварные типы |
| XML | Текст | Схемы, валидация | Тяжеловесен |
| CSV | Текст | Таблицы, универсальность | Нет типов и схемы |
| Parquet | Бинарный, колоночный | Аналитика на больших объёмах | Не читается глазами |
Для Big Data колоночный Parquet вытесняет CSV: он хранит схему и типы, жмёт данные в разы плотнее и позволяет читать только нужные колонки, не разбирая файл целиком.
Сжатие файлов
Сжатие — устранение избыточности данных. Два принципиально разных класса:
- Без потерь (zip, gzip, PNG, FLAC) — исходные байты восстанавливаются точно. Обязательно для кода, текста, таблиц.
- С потерями (JPEG, MP3, H.264) — часть информации выбрасывается навсегда, но так, чтобы человек не заметил. Даёт кратно меньший размер, но подходит только для медиа.
Практическое сравнение алгоритмов без потерь: gzip — универсальный компромисс и стандарт для HTTP; zstd — жмёт как gzip, но заметно быстрее, и потому вытесняет его в бэкапах; xz — жмёт сильнее всех, но медленно, уместен при однократной упаковке и многократном скачивании.
tar -czf backup.tar.gz data/ # gzip — универсально
tar -I 'zstd -19' -cf backup.tar.zst data/ # zstd — быстрее при схожем размере
Уже сжатое повторно не сжимается: класть JPEG или PNG в zip почти бессмысленно — выигрыш будет в единицы процентов.
Связанные термины
- Парсинг — разбор CSV, JSON и HTML
- Python — pandas и модуль csv для работы с таблицами
- Big Data — где CSV сменяется Parquet
- object storage — куда обычно складывают файлы и архивы
- Резервное копирование — основной потребитель сжатия без потерь
Готовы запустить GPU-задачу?
Запустить GPU-сервер