在Python中确定文件系统的簇大小

11 投票
2 回答
4405 浏览
提问于 2025-04-15 20:42

我想在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功能,它就会自动使用这个新功能。

撰写回答