【问题标题】:Determine cluster size of file system in Python在 Python 中确定文件系统的集群大小
【发布时间】:2010-03-22 14:54:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python filesystems


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      使用statvfs,至少如果您的目标是 Python 3.0 之前的版本。不确定它已被替换为什么。

      我还认为您必须自己进行数学运算,Python 似乎没有公开文件的“块大小”。

      【讨论】:

      • 谢谢,这会奏效。我似乎只弃用了 statvfs 常量,支持 os.statvfs 返回结构中可用的成员。
      • 不幸的是 statvfs 在 Windows 上不可用 :(
      猜你喜欢
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 2015-11-04
      • 2017-04-14
      • 2010-09-30
      • 2013-12-05
      • 2018-02-19
      • 1970-01-01
      相关资源
      最近更新 更多