2010-03-22 13 views
6

Me gustaría calcular el tamaño de "en el 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.Determinar el tamaño del clúster del sistema de archivos en Python

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

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

Estoy esperando que esto se puede hacer de forma independiente del sistema operativo ...

Respuesta

3

En las plataformas UNIX/Linux, use el os.statvfs integrado de Python. En Windows, a menos que se puede encontrar una biblioteca de terceros que lo hace, tendrá que utilizar ctypes llamar a la función Win32 GetDiskFreeSpace, así:

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 sólo se convirtió en parte de la stdlib Python en 2.5 o 2.6 (no recuerdo cual)

Pongo este tipo de cosas en una función que primero comprueba si la variante de UNIX está presente, y vuelve a los tipos si (presumiblemente porque no se está ejecutando en Windows) no. De esa forma, si Python alguna vez implementa statvfs en Windows, simplemente usará eso.

2

Uso statvfs, al menos si usted está apuntando para una versión pre-3.0 de Python. No estoy seguro de con qué se ha reemplazado.

También creo que vas a tener que hacer las matemáticas tú mismo, Python no parece exponer el "tamaño en bloques" de archivos.

+0

Gracias esto funcionará. Parece que solo las constantes statvfs están en desuso, a favor de los miembros disponibles en la estructura de retorno de os.statvfs. –

+0

Desafortunadamente statvfs no está disponible en Windows :( –

Cuestiones relacionadas