Определение размера кластера файловой системы в 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, похоже, не раскрывает "размер в блоках" файлов.