有没有比使用 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/