Требуется скрытый элемент результата stat
с именем st_blocks
.
>>> s = os.stat('some_file')
>>> s
posix.stat_result(st_mode=33261, st_ino=12583347, st_dev=234881026,
st_nlink=1, st_uid=1000, st_gid=20, st_size=9889973,
st_atime=1301371810, st_mtime=847731600, st_ctime=1301371422)
>>> s.st_size / 1e6 # size of data fork only, in MB
9.889973
>>> x.st_blocks * 512e-6 # total size on disk, in MB
20.758528
В рассматриваемом файле содержится около 10 МБ в ветке ресурсов, которая отображается в результате из stat
но в "скрытом" атрибуте.(Бонусные баллы для тех, кто точно знает, какой это файл.) Обратите внимание, что в man 2 stat
задокументировано, что атрибут st_blocks
всегда измеряет приращения в 512 байт.
Примечание: st_size
измеряет количество байтов данных, но st_blocks
измеряет размер на диске, включая служебные данные от частично используемых блоков.Итак,
>>> open('file.txt', 'w').write('Hello, world!')
13
>>> s = os.stat('file.txt')
>>> s.st_size
13
>>> s.st_blocks * 512
4096
Теперь, если вы выполните «Получение информации» в Finder, вы увидите, что файл имеет:
Размер: 4 КБ на диске (13байт)