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

标签 python filesystems

我想用 Python 计算文件的“磁盘大小”。因此,我想确定存储文件的文件系统的簇大小。

如何确定 Python 中的簇大小? 或者另一种计算“磁盘大小”的内置方法也可以使用。

我看了os.path.getsize但它以字节为单位返回文件大小,不考虑 FS 的 block 大小。

我希望这可以以独立于操作系统的方式完成...

最佳答案

在 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,它只会使用它。

关于python - 在 Python 中确定文件系统的簇大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2493172/

相关文章:

c++ - 检查文件名是有效的 Windows 名称

linux - 结构 super_block 和 ext2_super_block

python - 如何相对于 Pylons 应用程序根进行链接?

python - 如何在子图中绘制多个数据框

java - 从 Eclipse 插件使用 Jython

python变量,类

windows - 一个文件两个不同的输出 - Windows Server 2012

python - 当每个值都是 ndarray 时,按值获取 pandas 子系列

regex - Perl 代码中的这种特定路径串联是否可利用?

c - stat 系统调用的 st_mode 标志