определение размера подкаталога - PullRequest
0 голосов
/ 20 июня 2020

Я написал сценарий python, в котором я пытаюсь найти размер подкаталога, где я могу определить только базовый путь к каталогу, и мне нужно перейти к папке, размер которой я хочу проверить. Я могу распечатать этот конкретный каталог, но размер этого каталога составляет O МБ, в то время как это папка 31 МБ. Что мне не хватает. Пожалуйста, помогите.

# determine size of a given folder in MBytes
import os
# pick base path you have ...
for root, dirs, files in os.walk('E:\pkg'):
    Total_size = 0
    for dir in dirs:
        if dir.startswith('mobile'):
            dir = os.path.join(root, dir)
            Total_size = os.path.getsize(dir)
            print(dir)
            print("Size = %0.1f MB" % (Total_size / (1024 * 1024.0)))

1 Ответ

2 голосов
/ 20 июня 2020

.getsize не работает с каталогом. Это даст вам размер файла , а не каталога - вот почему вы получаете 0 для всего.

Метод расчета размера каталога - это пройти через все подкаталоги рекурсивно суммируют размеры каждого файла.

Или, по крайней мере, это то, что вы делали бы до того, как у нас было pathlib

root_dir = Path("path/to/directory")
root_dir_size = sum([f.stat().st_size for f in root_dir.glob('**/*') if f.is_file()])

Это приведет к root_dir_size байтам, затем вы можете обработать это как хотите.

Почему это нужно сделать миллиардом строк, когда одной строки достаточно?

Изменить: Действительно легко работать с любыми типами каталогов, с полным путем или без - но я полагаю, мне следует прояснить и это, поскольку OP попросил.

Замените это-

dir = os.path.join(root, dir)
Total_size = os.path.getsize(dir)

на это

root_subdir = Path(os.path.join(root, dir))
Total_size = sum([f.stat().st_size for f in root_subdir.glob('**/*') if f.is_file()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...