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

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

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

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

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

8
задан Philip Fourie 22 March 2010 в 14:54
поделиться

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, он просто будет использовать это.

4
ответ дан 5 December 2019 в 22:17
поделиться

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

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

2
ответ дан 5 December 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: