您的位置:

Python查看文件大小

一、os模块计算文件大小

import os

def get_file_size(file_path):
    # get size of the file in bytes
    size = os.path.getsize(file_path)
    
    # convert size to KB, MB, GB etc.
    suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']
    index = 0
    while size > 1024:
        size = size / 1024
        index += 1
    return f"{size:.2f} {suffixes[index]}"

file_path = "test.txt"
file_size = get_file_size(file_path)
print(f"Size of file {file_path}: {file_size}")

在Python中使用os模块可以很容易地计算文件大小。os.path.getsize()方法可以直接计算出文件的大小,单位是字节(bytes)。为了让文件大小的显示更加方便,我们可以将其换算成常用的KB、MB、GB和TB。

代码中,我们定义了一个函数get_file_size(file_path),其中传入的参数是文件路径。在函数内部,我们先使用os.path.getsize()获取文件大小,然后通过一个while循环将文件大小转换成更加直观的单位。

二、humanize模块显示文件大小

import humanize

file_path = "test.txt"
file_size = os.path.getsize(file_path)
print(f"Size of file {file_path}: {humanize.naturalsize(file_size)}")

为了让文件大小的显示更加易读,Python还提供了humanize库,该库提供了很多函数可以将数字转换成直观的单位。

在上面的代码中,我们使用humanize.naturalsize()函数将文件大小转换成比较好读的单位。该函数支持自动转换单位,因此不必手动进行单位转换。

三、递归计算目录大小

def get_dir_size(start_path='.'):
    total_size = 0
    with os.scandir(start_path) as it:
        for entry in it:
            if entry.is_file():
                total_size += entry.stat().st_size
            elif entry.is_dir():
                total_size += get_dir_size(entry.path)
    return total_size

dir_path = "/Users/username/Downloads"
dir_size = get_dir_size(dir_path)
print(f"Size of directory {dir_path}: {humanize.naturalsize(dir_size)}")

除了计算单个文件大小,我们还可以计算整个目录的大小。对于含有大量文件的目录,递归计算所有文件的大小可能会非常耗时。因此,我们应该使用os.scandir()函数来遍历整个目录,并使用递归的方式计算子目录的大小。

在上面的代码中,我们定义了一个函数get_dir_size(start_path)。函数接受一个参数start_path,该参数指定要计算大小的目录。在函数内部,我们使用os.scandir()函数遍历目录中的所有条目,并使用if语句对文件和目录进行区分。如果是文件,我们直接获取文件大小并累加到total_size中;如果是目录,我们递归调用get_dir_size()函数来计算该子目录的大小。

四、总结

通过os模块和humanize模块,我们可以方便地在Python中计算文件和目录大小。在实际工作中,我们可以结合操作系统的命令行工具和Python脚本来方便地管理文件和目录。

值得一提的是,humanize模块还提供了很多其他的函数,如将时间转换成易读的形式等。在实际编程中,我们可以根据需求选择合适的函数来简化开发。