小能豆

使用 Python 计算目录的大小?

python

使用 Python 计算目录的大小?


阅读 34

收藏
2024-09-12

共1个答案

小能豆

要在 Python 中计算目录的大小并将其格式化为人类可读的格式(例如 KB、MB、GB),可以使用oshumanize模块。以下解决方案可计算目录及其子目录中所有文件的大小,并将结果格式化为更易读的格式:

分步解决方案

  1. 计算目录大小:递归地计算目录中所有文件的大小总和。
  2. 格式化大小:使用实用函数将大小转换为 KB、MB、GB 等。

代码示例

下面是实现此目的的函数:

import os

def get_directory_size(path):
    total_size = 0
    # Walk through all directories and files in the given path
    for dirpath, dirnames, filenames in os.walk(path):
        for filename in filenames:
            file_path = os.path.join(dirpath, filename)
            # Check if it is a file before getting its size
            if os.path.isfile(file_path):
                total_size += os.path.getsize(file_path)
    return total_size

def format_size(size_bytes):
    # Handle zero bytes
    if size_bytes == 0:
        return "0B"
    # Define size units
    size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB")
    i = int(math.floor(math.log(size_bytes, 1024)))
    p = math.pow(1024, i)
    s = round(size_bytes / p, 2)
    return f"{s} {size_name[i]}"

# Usage example
directory_path = "your_directory_path"  # Replace with your directory path
size_in_bytes = get_directory_size(directory_path)
formatted_size = format_size(size_in_bytes)

print(f"Total size of '{directory_path}' is: {formatted_size}")

解释

  1. get_directory_size(path)
  2. 用于os.walk()遍历目录和子目录。
  3. 对于找到的每个文件,它会计算文件大小os.path.getsize(file_path)并将其添加到总大小中。
  4. format_size(size_bytes)
  5. 将大小从字节转换为更易读的格式(B、KB、MB 等)。
  6. 使用对数来确定适当的单位。

输出示例

如果目录为 2.34 GB,则输出将如下所示:

Total size of 'your_directory_path' is: 2.34 GB

其他说明

  • 如果您想要处理大型目录或提高性能,请考虑使用异步文件处理或多处理。
  • 要使用该humanize库进行更简单的尺寸格式化,请使用 安装它pip install humanize并替换format_sizehumanize.naturalsize(size_bytes)
2024-09-12