在Python中确定文件系统的簇大小
我想在Python中计算一个文件的“磁盘占用大小”。为此,我需要知道存放这个文件的文件系统的簇大小。
那么,我该如何在Python中确定簇大小呢?或者有没有其他内置的方法可以计算“磁盘占用大小”也可以。
我查看了os.path.getsize,但是它返回的是文件的字节大小,并没有考虑文件系统的块大小。
我希望这个方法可以在不同的操作系统上都能使用……
2 个回答
2
使用 statvfs,特别是如果你使用的是Python 3.0之前的版本。至于在新版本中用什么替代了它,我就不太清楚了。
我觉得你可能需要自己计算一下,Python似乎没有直接提供文件的“块大小”。
7
在UNIX/Linux系统上,可以使用Python自带的os.statvfs来获取磁盘信息。而在Windows系统上,如果找不到第三方库来实现这个功能,就需要用到ctypes来调用Windows的一个函数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版本可用,如果没有(通常是因为在Windows上运行),就使用ctypes。这样,如果将来Python在Windows上实现了statvfs功能,它就会自动使用这个新功能。