繁体   English   中英

如何查找目录及其所有子目录中所有文件的大小?

[英]How to find the size of all files in a directory and all its sub-directories?

我试图打印目录及其所有子目录中所有文件的名称和大小,但它只打印第一个目录中文件的名称和大小,而不打印子目录中的文件的名称和大小。 任何帮助将不胜感激。

import os
path = os.getcwd()
walk_method = os.walk(path)
while True:
    try:
        p, sub_dir, files = next(walk_method)
        break
    except:
        break
size_of_file = [
    (f, os.stat(os.path.join(path, f)).st_size)
    for f in files
]
for sub in sub_dir:
    i = os.path.join(path, sub)
    size = 0
    for k in os.listdir(i):
        size += os.stat(os.path.join(i, k)).st_size
    size_of_file.append((sub, size))
for f, s in sorted(size_of_file, key = lambda x: x[1]):
    print("{} : {}MB".format(os.path.join(path, f), round(s/(1024*1024), 3)))

我希望打印当前目录和所有子目录中所有文件的名称和文件大小。

文档包含一些您可能选择遵循的有用示例代码。 永远循环/next()/中断方法可以工作,我敢肯定,但它不是惯用的,而且这种风格不会提高代码的可维护性。

from pathlib import Path
import os

total = 0
for root, dirs, files in os.walk("."):
    for file in files:
        path = Path(root) / file
        print(path)
        total += path.stat().st_size

print(f"Total of {total} bytes.")

我认为 pathlib 在这里很棒,有很多方法可以解决这个问题,但一个简单的例子是这样的:

from pathlib import Path

dir = "."
paths = list(Path(dir).glob('**/*'))
for path in paths:
    if path.is_file():
        print(f"{path.name}, {path.lstat().st_size}")

您不需要循环,但为了简单起见,在本例中我只是使用了它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM