python Mac OS:os.path.getsize返回的值不同于du -ks?

时间:2013-06-04 08:51:44

标签: python macos directory os.walk du

当比较目录的大小与Unix和python时,我的结果略有不同(“磁盘使用率”减少了5%)。为什么? (我的所有子文件夹都是可读的;我在Mac OSX Mountain lion,python版本2.7.2下工作)

这是我的代码:

import os, sys
from commands import getstatusoutput

def get_size(start_path = '.'):
    total_size = 0
    for dirpath, dirnames, filenames in os.walk(start_path):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            total_size += os.path.getsize(fp)
    return total_size/1024

def get_size2(start_path = '.'):
    cmd = "du -ks "+start_path    # result in blocks of 1024 bytes
    code_err, output = getstatusoutput(cmd)
    return int(output.split()[0])

print get_size()
# 306789
print get_size2()
# 321328

提前感谢你的答案,

埃里克。

1 个答案:

答案 0 :(得分:1)

通常,du可以为您提供数据在磁盘上所占用的存储量,而许多其他测量数据的方式也可以为您提供数据的大小。

为什么不一样?

  • 有时数据可以非常有效地存储,并且比原始大小需要更少的存储空间。如果您有稀疏文件硬链接,则可能会发生这种情况。尽管这两种在Unix * ish文件系统上很常见,但可能还有其他事情,这取决于文件系统的怪异性。
  • 有时,磁盘上的数据需要的空间比原始大小要大。由于所有文件系统都按块顺序排列其文件数据,而数据并非总是以块大小的倍数出现,因此这是正常现象。这意味着通常浪费最后一块的一部分(即已占用但未使用)。