确定Python中文件系统的集群大小

11
我想在Python中计算文件的“磁盘使用量”。因此,我想确定存储文件的文件系统的簇大小。
如何在Python中确定簇大小?或者使用另一种内置方法计算“磁盘使用量”也可以。
我查看了os.path.getsize,但它仅返回以字节为单位的文件大小,而没有考虑FS的块大小。
我希望这可以以一种与操作系统无关的方式完成...
2个回答

7

在UNIX/Linux平台上,使用Python内置的os.statvfs。在Windows上,除非您能找到一个第三方库来完成这项工作,否则您需要使用ctypes调用Win32函数GetDiskFreeSpace,像这样:

import ctypes

sectorsPerCluster = ctypes.c_ulonglong(0)
bytesPerSector = ctypes.c_ulonglong(0)
rootPathName = ctypes.c_wchar_p(u"C:\\")

ctypes.windll.kernel32.GetDiskFreeSpaceW(rootPathName,
    ctypes.pointer(sectorsPerCluster),
    ctypes.pointer(bytesPerSector),
    None,
    None,
)

print(sectorsPerCluster.value, bytesPerSector.value)

请注意,ctypes 只在 Python 标准库中的 2.5 或 2.6 版本之后才被引入(我记不清是哪个版本了)。
我把这种情况放到一个函数中,首先检查是否存在 UNIX 变体,如果不存在则退而求其次使用 ctypes(可能因为它正在运行 Windows)。这样,如果 Python 在 Windows 上实现 statvfs,它将直接使用该实现。

2
使用statvfs,至少在 Python 3.0 版本之前是这样的。不确定它已经被替换成了什么。
我也认为你需要自己计算,Python 似乎没有暴露文件的“块大小”。

谢谢,这个可以用。似乎只有statvfs常量被弃用了,取而代之的是os.statvfs返回结构中可用的成员。 - Philip Fourie
很遗憾,statvfs在Windows上不可用 :( - Philip Fourie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接