desperadik
@desperadik
Истина где-то рядом.

Как узнать размер директории через Python?

В никсах существует прекрасная команда du, для того что бы сразу показать размер поддиректорий в директории.
Как это реализовать через Python скрипт?

Делаю так:
import os
#Указываю директорию
basedir = "/home/user/test/"
#Пока примем что размер поддиректорий равен 0
sub_size = 0
#Так как мы не знаем сколько поддиректорий в директории, получаем их названия.
subnames = os.listdir(basedir)
#Далее через цикл сплитим пути до поддиректорий.
for subname in subnames:
    subpath = "%s/%s" % (os.path.dirname(basedir), subname)
    #Потом через walk, получим кортеж (путь до директории, поддиректория, файлы)
    for path, subdirs, files in os.walk(subpath):
         #Кто у нас "ест" место? Проходимся по этим файлам и складываем размер
         for files in file:
              #Получаем полный путь до файла.
              filename = os.path.join(path, file)
              #Узнаем его размер и увеличиваем размер папки
              sub_size += os.path.getsize(filename) /1024 /1024
    print "%s - %.1f Mb" % (basedir[len[basedir]: ], sub_size)

НО....оно выводит мне размер поддиректорий..так что размер второй поддиректории равен сумме размеров первой и второй, и так далее.

СКАЖИТЕ, где ошибка!!!
  • Вопрос задан
  • 9621 просмотр
Решения вопроса 2
Если я правильно понял, то нужно переместить sub_size = 0:

import os

basedir = "/home/user/test/"

subnames = os.listdir(basedir)
for subname in subnames:
    sub_size = 0
    subpath = "%s/%s" % (os.path.dirname(basedir), subname)
    for path, subdirs, files in os.walk(subpath):
         for files in file:
              filename = os.path.join(path, file)
              sub_size += os.path.getsize(filename) /1024 /1024
    print "%s - %.1f Mb" % (basedir[len[basedir]: ], sub_size)
Ответ написан
@devel787
В никсах существует прекрасная команда du, для того что бы сразу показать размер поддиректорий в директории.
Как это реализовать через Python скрипт?


Ещё есть пакет sh 1.09 (docs), который может помочь вам вызвать du из вашего скрипта (пример вызова с участием du) -- возможно, вам больше подойдет такой подход.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vladimir-klp
Тоже было изучал этот вопрос. Решений множество, многие громоздкие. В итоге написал коротенькую функцию, которая вычисляет размер каталога до байта, количество файлов в каталоге (сверял со значением из свойства папки в Windows)
import os
from pathlib import Path

#Вычисляет размер папки, количество файлов и количество итераций функции
def folderSize(path):
    fsize = 0
    numfile = 0
    iteration = 0
    for file in Path(path).rglob('*'):
        if (os.path.isfile(file)):
            fsize += os.path.getsize(file)
            numfile +=1
        iteration+=1
    return fsize, numfile, iteration

Далее в коде вызываем ее (кусочек взят из моего рабочего скрипта):
print("Вычисление размера выбранной папки...")
size, numfile, iteration = folderSize(folder)
print(f'Выбрана папка: {folder}')
print(f'Найдено файлов: {numfile}')
print("Размер папки:")
print(f'{size} Bytes')       
print(f'{size/1048576:.2f} Mb')
print(f'{size/1073741824:.2f} Gb')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы