Я пытаюсь вычислить размер папки в Python, но у меня странный результат.Размер папки для скачивания: пустые папки имеют размер по умолчанию?
Это фрагмент моего кода:
def bestsize(filepath):
""" Return a tuple with 3 values. The first is the file (or folder size). The second and third
have sense only for folder and are the number of files and subdirectories in folder
"""
from os.path import getsize, isdir
if not(isdir(filepath)): return (getsize(filepath), 1, 0)
else:
lf = []
ld = []
for root, dirs, files in os.walk(filepath):
for name in files: lf.append(os.path.join(root, name))
for dir in dirs: ld.append(os.path.join(root, dir))
return (sum(getsize(i) for i in lf), len(lf), len(ld))
Я сделал несколько тестов на это сравнение результата, как сказано на Windows Explorer в.
Я создал папку с именем «temp», и в ней есть подпапка под названием temp и файл из 7 байт, называемый ciao.txt
. Временная папка пуста. Если я выполняю свою функцию, я получаю, что моя основная папка имеет размер 7 байт. Но с проводником Windows я получаю 4096 байт.
Должен ли я вычислять размер по умолчанию для всех, также пустых, подпапок?
Функция getsize
по умолчанию в модуле os возвращает 0 для всех каталогов.
Edit: Я проверил мой код на раздел NTFS файловой системы
Edit: Спасибо, теперь я понял. Что я хотел бы сделать, это лучшая команда dir/ls. Я использую прежнюю сумму, рассчитанную с использованием getize, теперь, когда я понял разницу, это хорошо для меня.
Редактировать 2: Я редактировал код, помещающий свою последнюю версию.
Что такое файловая система? FAT32? NTFS? –
бит «пустых папок» походит на красную селедку на ваш реальный вопрос. Да, пустые папки имеют размер по умолчанию - или, скорее, минимальный размер (если вы заполняете и затем выгружаете каталог, это может быть больше). Но это 0 в Windows. (В большинстве систем Unix он имеет порядок 32-128, если вы его запрашиваете, каталог должен иметь реальный список каталогов с элементами '.' И '..'. Хотя файловая система _could_ создавала эти ленивые, это не то, что HFS +, ext3 и т. д.). – abarnert