Determine el tamaño del clúster del sistema de archivos en Python

Me gustaría calcular el ” tamaño en disco ” de un archivo en Python. Por lo tanto, me gustaría determinar el tamaño del clúster del sistema de archivos donde se almacena el archivo.

¿Cómo puedo determinar el tamaño del clúster en Python? O también funcionará otro método incorporado que calcula el ” tamaño en el disco “.

Miré os.path.getsize pero devuelve el tamaño del archivo en bytes, sin tener en cuenta el tamaño de bloque del FS.

Espero que esto se pueda hacer de una manera independiente del sistema operativo …

En plataformas UNIX / Linux, use os.statvfs integrado en Python . En Windows, a menos que pueda encontrar una biblioteca de terceros que lo haga, deberá usar ctypes para llamar a la función Win32 GetDiskFreeSpace , como esto:

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) 

Tenga en cuenta que ctypes solo se convirtió en parte de Python stdlib en 2.5 o 2.6 (no recuerdo cuál).

Pongo este tipo de cosas en una función que primero verifica si la variante de UNIX está presente, y vuelve a los ctypes si (probablemente porque no se ejecuta en Windows). De esa manera, si Python implementa alguna vez statvfs en Windows, solo usará eso.

Use statvfs , al menos si apunta a una versión pre-3.0 de Python. No estoy seguro de con qué ha sido reemplazado.

También creo que vas a tener que hacer los cálculos tú mismo, Python no parece exponer el “tamaño en bloques” de los archivos.