Определение размера кластера файловой системы в Python

Я хотел бы рассчитать "размер на диске " файла в Python. Поэтому я хотел бы определить размер кластера файловой системы, в которой хранится файл.

Как определить размер кластера в Python? Или другой встроенный метод, который вычисляет "размер на диске" также будет работать.

Я посмотрел на os.путь.getsize не но она возвращает размер файла в байтах, не принимая размер блока FS учитывается.

Я надеюсь, что это можно сделать независимым от ОС способом...

2 ответов


на платформах 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 стали частью Python stdlib только в 2.5 или 2.6 (не могу вспомнить, какой).

я помещаю такие вещи в функцию, которая сначала проверяет, присутствует ли вариант UNIX, и возвращается для ctypes, если (предположительно, потому что он работает в Windows) нет. Таким образом, если Python когда-либо реализует statvfs в Windows, он просто будет использовать это.


использовать statvfs, по крайней мере, если вы нацелены на версию Python до 3.0. Не знаю, чем его заменили.

Я также думаю, что вам придется делать математику самостоятельно, Python, похоже, не раскрывает "размер в блоках" файлов.