我想計算Python中文件的「大小」。因此,我想確定存儲文件的文件系統的簇大小。使用Python確定文件系統的簇大小
如何確定Python中的簇大小? 或另一種內置方法,即計算「大小的磁盤」也是可行的。
我看着os.path.getsize,但它返回文件大小的字節數,沒有考慮到FS的塊大小。
我希望這可以在一個獨立於操作系統的方式來完成...
我想計算Python中文件的「大小」。因此,我想確定存儲文件的文件系統的簇大小。使用Python確定文件系統的簇大小
如何確定Python中的簇大小? 或另一種內置方法,即計算「大小的磁盤」也是可行的。
我看着os.path.getsize,但它返回文件大小的字節數,沒有考慮到FS的塊大小。
我希望這可以在一個獨立於操作系統的方式來完成...
在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,它就會使用它。
使用statvfs,至少如果你的目標爲3.0之前的版本的Python。不知道它被替換的是什麼。
我也認爲你將不得不自己做數學,Python似乎沒有公開文件的「塊大小」。
謝謝,這將工作。我似乎只有statvfs常量被棄用,贊成在os.statvfs返回結構中可用的成員。 – 2010-03-22 15:11:48
不幸的是statvfs在Windows上不可用:( – 2010-03-22 15:20:33