Source code for pyiron_base.project.size

import math
import os

import pint


def _size_conversion(size: pint.Quantity):
    sign_prefactor = 1
    if size < 0:
        sign_prefactor = -1
        size *= -1
    elif size == 0:
        return size

    prefix_index = math.floor(math.log2(size) / 10) - 1
    prefix = ["Ki", "Mi", "Gi", "Ti", "Pi"]

    size *= sign_prefactor
    if prefix_index < 0:
        return size
    elif prefix_index < 5:
        return size.to(f"{prefix[prefix_index]}byte")
    else:
        return size.to(f"{prefix[-1]}byte")


[docs] def get_folder_size(path): size = ( sum( [ sum([os.path.getsize(os.path.join(path, f)) for f in files]) for path, dirs, files in os.walk(path) ] ) * pint.UnitRegistry().byte ) return _size_conversion(size)