【发布时间】:2010-03-22 14:54:53
【问题描述】:
我想用 Python 计算文件的“磁盘大小”。因此,我想确定存储文件的文件系统的集群大小。
如何确定 Python 中的集群大小? 或者另一个计算“磁盘大小”的内置方法也可以。
我查看了os.path.getsize,但它以字节为单位返回文件大小,没有考虑 FS 的块大小。
我希望这可以以独立于操作系统的方式完成...
【问题讨论】:
标签: python filesystems
我想用 Python 计算文件的“磁盘大小”。因此,我想确定存储文件的文件系统的集群大小。
如何确定 Python 中的集群大小? 或者另一个计算“磁盘大小”的内置方法也可以。
我查看了os.path.getsize,但它以字节为单位返回文件大小,没有考虑 FS 的块大小。
我希望这可以以独立于操作系统的方式完成...
【问题讨论】:
标签: python filesystems
在 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 仅在 2.5 或 2.6 中成为 Python stdlib 的一部分(不记得是哪个)。
我把这种东西放在一个函数中,它首先检查是否存在 UNIX 变体,如果不存在(可能是因为它在 Windows 上运行)则回退到 ctypes。这样,如果 Python 确实在 Windows 上实现了 statvfs,它只会使用它。
【讨论】:
使用statvfs,至少如果您的目标是 Python 3.0 之前的版本。不确定它已被替换为什么。
我还认为您必须自己进行数学运算,Python 似乎没有公开文件的“块大小”。
【讨论】: