python - 在 Python 中获取 %ROOT% 大小

标签 python size directory os.walk

有没有比使用 os.walk 更好的获取根大小的方法?

import os    

def get_size( start_path='.' ):
    total_size = 0
    for dirpath, dirnames, filenames in os.walk(start_path):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            total_size += os.path.getsize(fp)
    return total_size    

print get_size("C:/")

我正在尝试这段代码(我从 here 获得),它在文件夹内工作正常,不是那么快,但是当我在根目录中尝试它时它非常慢或者有时会崩溃 [WindowsError: [Error 123] 文件名、目录名或卷标语法不正确]。有没有办法像在 C:\中左键单击属性一样获取根大小?

编辑: 我稍微调整了代码以避免错误。

fp = os.path.join(dirpath, f)
try:
    stat = os.stat(fp)
except OSError:
    continue

try:
    seen[stat.st_ino]
except KeyError:
    seen[stat.st_ino] = True
else:
    continue

total_size += stat.st_size

但它仍然很慢。计算需要6~7分钟。

最佳答案

您想访问操作系统调用以获取卷的可用空间。

在 Python 3.3 及更高版本中,它称为 shutil.disk_usage。对于旧版本的 Python,在 Unix 上人们建议使用各种方法,例如调用外部 df 实用程序,但这在 Windows 上不起作用。看来最好的答案是调用 win32 API 函数 GetDiskFreeSpaceEx。看看这封电子邮件:

https://mail.python.org/pipermail/python-win32/2010-July/010640.html

代码如下:

from ctypes import c_ulong, byref, windll

freeBytesAvailable = c_ulong()
totalNumberOfBytes = c_ulong()
totalNumberOfFreeBytes = c_ulong()

# Ansi version:
windll.kernel32.GetDiskFreeSpaceExA('c:\\', byref(freeBytesAvailable),
byref(totalNumberOfBytes), byref(totalNumberOfFreeBytes))

如果您有 Unicode 文件名,也可以调用 Unicode 版本 GetDiskFreeSpaceExW

关于python - 在 Python 中获取 %ROOT% 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21103216/

相关文章:

c - 指针变量的大小

html - 修复大小标签 "li"并减少粗体字号

计算目录大小的Java程序不断抛出NPE

python - 将解析数字格式化为 float()

Python list.insert() 多索引/列表列表

c++ - std::vector 数组的大小

javascript - 如何使用 Node.js 检查目录是否为空?

python - URL 文件夹系统 Django Python

Python单元测试-可能会一直失败直到通过吗?

python - 从字典中获取特定键的方法