Skip to main content
 首页 » 编程设计

python之如何在获取所有文件大小的同一函数中获取总目录大小 (Python)

2025年05月04日9soundcode

我正在使用以下函数从目标目录向下获取系统中的所有文件大小。

def get_files(target): 
    # Get file size and modified time for all files from the target directory and down. 
    # Initialize files list 
    filelist = [] 
    # Walk the directory structure 
    for root, dirs, files in os.walk(target): 
        # Do not walk into directories that are mount points 
        dirs[:] = filter(lambda dir: not os.path.ismount(os.path.join(root, dir)), dirs) 
        for name in files: 
            # Construct absolute path for files 
            filename = os.path.join(root, name) 
            # Test the path to account for broken symlinks 
            if os.path.exists(filename): 
                # File size information in bytes 
                size = float(os.path.getsize(filename)) 
                # Get the modified time of the file 
                mtime = os.path.getmtime(filename) 
                # Create a tuple of filename, size, and modified time 
                construct = filename, size, str(datetime.datetime.fromtimestamp(mtime)) 
                # Add the tuple to the master filelist 
                filelist.append(construct) 
    return(filelist) 

如何修改它以包括包含目录和目录总大小的第二个列表?我正在尝试将此操作包含在一个函数中,希望比在单独的函数中执行第二次遍历以获取目录信息和大小更有效。

我们的想法是能够使用前 20 个最大文件的排序列表和前 10 个最大目录的第二个排序列表进行报告。

感谢你们的任何建议。

请您参考如下方法:

我在字典中而不是列表中输出目录,但看看你是否喜欢它:

def get_files(target): 
    # Get file size and modified time for all files from the target directory and down. 
    # Initialize files list 
    filelist = [] 
    dirdict = {} 
    # Walk the directory structure 
    for root, dirs, files in os.walk(target): 
        # Do not walk into directories that are mount points 
        dirs[:] = filter(lambda dir: not os.path.ismount(os.path.join(root, dir)), dirs) 
        for name in files: 
            # Construct absolute path for files 
            filename = os.path.join(root, name) 
            # Test the path to account for broken symlinks 
            if os.path.exists(filename): 
                # File size information in bytes 
                size = float(os.path.getsize(filename)) 
                # Get the modified time of the file 
                mtime = os.path.getmtime(filename) 
                # Create a tuple of filename, size, and modified time 
                construct = filename, size, str(datetime.datetime.fromtimestamp(mtime)) 
                # Add the tuple to the master filelist 
                filelist.append(construct) 
                if root in dirdict.keys(): 
                    dirdict[root] += size 
                else: 
                    dirdict[root] = size 
    return(filelist, dirdict) 

如果您希望将指令作为元组列表,只需执行以下操作:

dirdict.items()