2010-03-22 31 views
6

我想計算Python中文件的「大小」。因此,我想確定存儲文件的文件系統的簇大小。使用Python確定文件系統的簇大小

如何確定Python中的簇大小? 或另一種內置方法,即計算「大小的磁盤」也是可行的。

我看着os.path.getsize,但它返回文件大小的字節數,沒有考慮到FS的塊大小。

我希望這可以在一個獨立於操作系統的方式來完成...

回答

3

在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變體,如果(大概是因爲它在Windows上運行)不是,則返回到ctypes。這樣,如果Python在Windows上實現statvfs,它就會使用它。

2

使用statvfs,至少如果你的目標爲3.0之前的版本的Python。不知道它被替換的是什麼。

我也認爲你將不得不自己做數學,Python似乎沒有公開文件的「塊大小」。

+0

謝謝,這將工作。我似乎只有statvfs常量被棄用,贊成在os.statvfs返回結構中可用的成員。 – 2010-03-22 15:11:48

+0

不幸的是statvfs在Windows上不可用:( – 2010-03-22 15:20:33