【问题标题】:Finding the biggest folder within a directory tree查找目录树中最大的文件夹
【发布时间】:2019-11-14 10:54:50
【问题描述】:

我正在尝试创建一个遍历目录树的函数,以查找并打印最大尺寸的文件夹。

我编写了以下有效的代码,但想知道是否有更有效的方法?

import os

def biggestFolder(directory):
    folderSize = []
    for folders, subfolders, filenames in os.walk(directory):
        folderSize.append(os.path.getsize(folders))
        maxFolder = max(folderSize)
        if os.path.getsize(folders) == maxFolder:
            return folders



print(biggestFolder('/Users/ryanunderwood/Documents'))

【问题讨论】:

  • 如果以下答案之一解决了您的问题,您应该接受它(单击相应答案旁边的复选标记)。这有两件事。它让每个人都知道您的问题已得到您满意的解决,并为帮助您的人提供帮助。 See here 以获得完整的解释。

标签: python


【解决方案1】:

如果您正在寻找最大尺寸的文件夹,我不明白您为什么需要os.walk,即在整个目录中用尽递归搜索。您的父文件夹显然会比里面的文件夹大。此外,os.path.getsize 不能用于文件夹,即这不是递归计算大小,而是只返回文件夹的大小(更多信息 here)。

为了整洁,你可以使用pathlib.Path标准库。

from pathlib import Path
import operator

root = "/path/to/root/dir/"
p = Path(root)
folder_size_dict = {}

# Iterate through all folders
for subdir in p.iterdir():
    # Calculate recursively the size for each subdir
    subdir_size = sum(f.stat().st_size for f in subdir.glob('**/*') if f.is_file())
    folder_size_dict[subdir] = subdir_size

# Get folder (key) with largest size (value)
largest_folder = max(folder_size_dict.items(), key=operator.itemgetter(1))[0]
print(f"Largest folder: {largest_folder} with size {folder_size_dict[largest_folder]}"

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    对于使用 OS 命令的 linux/mac,您可以使用:

    import subprocess
    dir = "/home/user/path/"
    cmd = f"du -sk {dir}* | sort -n"
    out =  subprocess.getoutput(cmd)
    print(out.split("\n")[-1])
    # 1547380 /home/user/public_html
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2017-05-07
      • 2017-08-21
      • 2016-02-16
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多