Размер файла — это объем данных, которые он содержит, измеренный в байтах. Рядом всегда есть вторая величина — размер на диске: сколько места файл реально занимает на носителе. Они различаются, потому что файловая система выделяет место блоками (кластерами), а не побайтно. Ниже разберем единицы измерения (бит, байт, КБ и КиБ), разницу двух размеров и то, как узнать объем файла и папки в Windows, Linux и macOS, а также программно на Python.
Содержание
Бит и байт: с чего все считается
Бит — минимальная единица информации, принимает значение 0 или 1. Байт — группа битов, которой адресуется память. В современных системах 1 байт = 8 бит (такой байт называют октетом). Байт — это базовая единица, в которой измеряют размер файла: все более крупные единицы (килобайт, мегабайт) — это кратные байта.
Бит используют для скорости передачи, байт — для размера. Отсюда путаница: интернет-канал «100 Мбит/с» — это мегабиты в секунду, а не мегабайты. Чтобы получить скорость загрузки в мегабайтах, делят примерно на 8: 100 Мбит/с — это около 12,5 МБ/с.
КБ против КиБ: почему 1000 и 1024 — это разные вещи
Здесь кроется главная причина, по которой «размер флешки не совпадает». Есть две системы приставок.
Десятичная (СИ): приставки кило-, мега-, гига- означают степени 1000. Двоичная (IEC): приставки киби-, меби-, гиби- означают степени 1024. Двоичные единицы придумали именно чтобы развести смыслы, но в быту и в некоторых ОС до сих пор пишут «КБ», подразумевая 1024.
| Приставка | Десятичная (СИ) | Двоичная (IEC) |
|---|---|---|
| кило | кБ = 1000 Б | КиБ = 1024 Б |
| мега | МБ = 1 000 000 Б | МиБ = 1 048 576 Б |
| гига | ГБ = 1 000 000 000 Б | ГиБ = 1 073 741 824 Б |
| тера | ТБ = 10^12 Б | ТиБ = 1024^4 Б |
Практический вывод. Производители накопителей считают в десятичных единицах: диск «1 ТБ» — это 10^12 байт. Windows же показывает объем в двоичных единицах, но подписывает их как «ГБ». Поэтому диск на 1 ТБ в проводнике выглядит как примерно 931 ГБ: 10^12 / 1024^3 = 931,32. Файл никуда не делся — это разница систем счета, а не потеря места.
Размер и размер на диске: при чем тут кластер
Логический размер — это точное число байт в файле. Размер на диске — это место, которое файловая система под него выделила. Диск размечен на кластеры (в терминах Linux — блоки) фиксированной длины, и файл занимает целое число кластеров, округленное вверх.
Пример: текстовый файл из 10 байт на томе NTFS с кластером 4 КиБ займет на диске целых 4096 байт — один кластер целиком. Тысяча таких мелких файлов «весит» 10 КБ по содержимому, но отъедает около 4 МБ места. Обратная ситуация тоже бывает: сжатые тома и разреженные (sparse) файлы могут занимать на диске меньше логического размера.
Размер кластера по умолчанию зависит от файловой системы и размера тома (для типичных томов NTFS это 4 КиБ). Точное значение см. в разделе «Точки для фактчека».
Как посмотреть размер в Windows, Linux и macOS
Через графический интерфейс:
- Windows: правой кнопкой по файлу -> «Свойства» -> вкладка «Общие». Там две строки: «Размер» (логический) и «Размер на диске».
- macOS: правой кнопкой (или Cmd+I) -> «Свойства» (Get Info). Поле «Размер» показывает и логический объем, и место на диске в скобках.
- Linux: в файловом менеджере (Nautilus, Dolphin) — «Свойства» контекстного меню.
Через терминал точный размер в байтах удобнее и однозначнее:
| ОС | Точный размер в байтах | Человекочитаемо |
|---|---|---|
| Windows (PowerShell) | (Get-Item file.txt).Length |
— |
| Linux | stat -c%s file.txt |
ls -lh file.txt |
| macOS | stat -f%z file.txt |
ls -lh file.txt |
Обратите внимание: stat в Linux (GNU) и macOS (BSD) — разные утилиты с разным синтаксисом, поэтому флаги отличаются (-c%s против -f%z).
Для папок и оценки места на диске используют du:
du -sh mydir # суммарное место на диске, человекочитаемо (обычно по 1024)
du -sb file.txt # логический размер в байтах (GNU du, Linux)
Флаг -b (то же, что --apparent-size --block-size=1) есть в GNU du из Linux; в BSD du на macOS его нет, там для логического размера берут stat -f%z. По умолчанию du показывает именно место на диске (блоки), а не сумму содержимого — это и есть разница «размер на диске» против «размера».
Как узнать размер файла на Python
Начнем с минимального полного примера, который можно скопировать и запустить. Он создает файл известного размера и читает его объем:
import os
# создаем файл из 2500 ASCII-символов; в UTF-8 это ровно 2500 байт
with open("demo.txt", "w", encoding="utf-8") as f:
f.write("A" * 2500)
print(os.path.getsize("demo.txt")) # 2500
Функция os.path.getsize() возвращает логический размер в байтах. Тот же результат дает os.stat() через поле st_size — это удобно, когда нужны и другие атрибуты файла:
import os
st = os.stat("demo.txt")
print(st.st_size) # 2500 - логический размер, байты
Место на диске Python тоже умеет показывать, но через блоки, и только на Unix-подобных системах (Linux, macOS). Поле st_blocks считает 512-байтные блоки независимо от реального размера кластера:
import os
st = os.stat("demo.txt")
print(st.st_blocks * 512) # место на диске в байтах (Linux/macOS; на Windows st_blocks нет)
Чтобы перевести байты в человекочитаемый вид, важно выбрать систему приставок. Ниже — двоичная (КиБ, МиБ):
def human_binary(n):
units = ["Б", "КиБ", "МиБ", "ГиБ", "ТиБ"]
size = float(n)
for unit in units:
if size < 1024 or unit == units[-1]:
return f"{size:.1f} {unit}"
size /= 1024
print(human_binary(2500)) # 2.4 КиБ (2500 / 1024 = 2.44)
Размер папки в Python — это сумма размеров всех файлов внутри. Обходим дерево через os.walk() и складываем логические размеры, пропуская символические ссылки, чтобы не считать один файл дважды:
import os
def dir_size(root):
total = 0
for dirpath, _dirs, files in os.walk(root):
for name in files:
path = os.path.join(dirpath, name)
if not os.path.islink(path):
total += os.path.getsize(path)
return total
print(dir_size(".")) # сумма логических размеров файлов, байты
Такой подсчет дает логический объем (аналог du --apparent-size), а не место на диске. Для места на диске в цикле суммируют os.stat(path).st_blocks * 512 вместо getsize — и снова только на Unix.
Если размер выглядит странно
- У ярлыка или ссылки размер почти нулевой. Это нормально: ярлык хранит путь, а не сам файл. Смотрите размер целевого файла.
- Размер папки долго считается. Система обходит все вложенные файлы; для сетевых дисков это медленно. Дождитесь окончания подсчета.
- Размер на диске меньше логического. Скорее всего включено сжатие тома или это разреженный файл — так и должно быть.
- Флешка «меньше заявленной». Производитель считал в десятичных ГБ, ОС показывает двоичные ГиБ. Плюс часть занимает служебная разметка.
- Заархивированный файл почти не уменьшился. Внутри уже сжатые данные (см. FAQ).
Выводы
- Базовая единица размера — байт (8 бит); все крупные единицы кратны ему, а бит используют для скорости, а не объема.
- Ключевая путаница — приставки: кБ/МБ/ГБ по СИ это степени 1000, а КиБ/МиБ/ГиБ по IEC это степени 1024; отсюда «1 ТБ = 931 ГиБ».
- Логический размер и размер на диске — разные величины: файл занимает целое число кластеров, поэтому мелкий файл на диске «весит» как целый кластер.
- Посмотреть размер можно в свойствах файла или в терминале:
stat,ls -lh,duна Linux/macOS и(Get-Item).Lengthв PowerShell. - На Python логический размер дает
os.path.getsize()илиst_size, место на диске —st_blocks * 512(только Unix), размер папки — сумма поos.walk().
Где применяется / связь с практикой
Освойте тему на практике
Ручной подсчет годится для одного файла, но как только нужно проверить сотни файлов, найти самые тяжелые в проекте или собрать отчет по занятому месту, задачу решают скриптом. Именно os, os.path, pathlib и обход дерева каталогов — тот набор, с которого начинается автоматизация работы с файловой системой. Разобраться в нем системно помогает курс Python Basic: там разбирают работу с файлами, строками и модулями стандартной библиотеки на практических задачах.
Освойте тему на практике
Если хочется сначала посмотреть формат и уровень занятий, загляните на открытые уроки Otus — они бесплатные и проходят вживую с преподавателем.
FAQ
Почему скорость интернета в мегабитах, а размер файла в мегабайтах?
Скорость передачи исторически измеряют в битах в секунду (Мбит/с), а объем данных — в байтах. Чтобы прикинуть, за сколько скачается файл, размер в мегабайтах умножают примерно на 8 и делят на скорость канала в мегабитах.
Почему архив иногда почти не уменьшает файл?
Архиваторы сжимают за счет повторов и избыточности. Форматы вроде JPG, MP4, MP3 или PDF уже сжаты внутри, поэтому zip или rar поверх них дает выигрыш в единицы процентов, а иногда чуть увеличивает размер за счет служебных данных.
Сколько занимает пустой файл или файл из одного символа?
Логически пустой файл — это 0 байт, а файл из одной латинской буквы в UTF-8 — 1 байт. Но на диске оба займут минимум один кластер (например, 4 КиБ на NTFS), поэтому размер на диске будет заметно больше содержимого.



