Определить размер кластера файловой системы в Python - PullRequest
7 голосов
/ 22 марта 2010

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 22 марта 2010

На платформах 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, он просто использует это.

2 голосов
/ 22 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...