详解Python 如何计算一个目录的大小

  • Post category:Python

Python计算目录大小攻略

计算目录大小是一个常见的需求,使用Python可以轻松地实现这个功能。Python的标准库osos.path提供了获取文件、目录属性的方法,可以很方便地计算目录大小。

方法一:使用os模块

步骤一:导入os模块

import os

步骤二:编写获取目录大小的函数

def get_dir_size(dir_path):
    """
    计算目录大小
    :param dir_path: 目录路径
    :return: 目录大小,单位为字节
    """
    size = 0
    for root, dirs, files in os.walk(dir_path):
        for file in files:
            size += os.path.getsize(os.path.join(root, file))
    return size

步骤三:调用函数计算目录大小

dir_path = '/path/to/directory'
dir_size = get_dir_size(dir_path)
print(f'The size of directory {dir_path} is {dir_size} bytes.')

方法二:使用du命令

除了使用Python代码计算目录大小,我们还可以借助系统命令du来实现。

步骤一:导入subprocess模块

import subprocess

步骤二:编写获取目录大小的函数

def get_dir_size(dir_path):
    """
    计算目录大小
    :param dir_path: 目录路径
    :return: 目录大小,单位为字节
    """
    cmd = f'du -sb {dir_path}'
    res = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    size = int(res.stdout.split()[0])
    return size

步骤三:调用函数计算目录大小

dir_path = '/path/to/directory'
dir_size = get_dir_size(dir_path)
print(f'The size of directory {dir_path} is {dir_size} bytes.')

示例说明

假设我们有一个名为/tmp/mydir的目录,其中包含5个文件,总大小为100M。

使用方法一计算目录大小:

import os

def get_dir_size(dir_path):
    """
    计算目录大小
    :param dir_path: 目录路径
    :return: 目录大小,单位为字节
    """
    size = 0
    for root, dirs, files in os.walk(dir_path):
        for file in files:
            size += os.path.getsize(os.path.join(root, file))
    return size

dir_path = '/tmp/mydir'
dir_size = get_dir_size(dir_path)
print(f'The size of directory {dir_path} is {dir_size} bytes.')

输出结果为:

The size of directory /tmp/mydir is 104857600 bytes.

使用方法二计算目录大小:

import subprocess

def get_dir_size(dir_path):
    """
    计算目录大小
    :param dir_path: 目录路径
    :return: 目录大小,单位为字节
    """
    cmd = f'du -sb {dir_path}'
    res = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    size = int(res.stdout.split()[0])
    return size

dir_path = '/tmp/mydir'
dir_size = get_dir_size(dir_path)
print(f'The size of directory {dir_path} is {dir_size} bytes.')

输出结果为:

The size of directory /tmp/mydir is 104857600 bytes.

两种方法的输出结果相同,均为104857600 bytes。