Я хотел бы вычислить "размер на диск" файла в Python. Поэтому я хотел бы определить размер кластера файловой системы, где файл хранится.
Как я определяю размер кластера в Python? Или другой встроенный метод, который вычисляет "размер на диск", будет также работать.
Я посмотрел на os.path.getsize, но он возвращает размер файла в байтах, не принимая размер блока FS во внимание.
Я надеюсь, что это может быть сделано независимым от операционной системы способом...
На платформах 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, похоже, не показывает «размер в блоках» файлов.