为什么Python会向Windows发现不同的文件大小?

时间:2017-04-29 22:17:17

标签: python-3.x file filesize

我正在创建一个基本的GUI作为大学项目。它从用户的PC上扫描用户选择的硬盘驱动器并向其提供有关它的信息,例如其上的文件数量等...

我的扫描功能的一部分是,对于驱动器上的每个文件,以字节为单位获取所述文件的大小,并将其添加到运行总计中。最后,在将数字与Windows总数进行比较后,我总是发现我的Python脚本找到的数据少于Windows在驱动器上所说的数据。

以下是代码......

import os

overall_space_used = 0

def Scan (drive):
    global overall_space_used

    for path, subdirs, files in os.walk (r"" + drive + "\\"):
        for file in files:
            overall_space_used = overall_space_used + os.path.getsize(os.path.join(path,file))
    print (overall_space_used)

当在我的一个硬盘驱动器上执行此操作时,Python表示总共有23,328,445,304个字节的数据(21.7 GB)。但是,当我进入Windows的驱动器时,它说有23,536,922,624字节的数据(21.9 GB)。为什么会出现这种差异?

我手动计算它,并使用Windows用于从字节转换为千兆字节(gigibytes = bytes / 1024**3)的相同公式,我仍然到达.2 GB短。为什么Python找不到更少的数据?

1 个答案:

答案 0 :(得分:4)

使用os.path.getsize(...),您可以获得文件的实际大小。 但NTFS,FAT32,......文件系统使用集群来存储数据,因此它们不能完全填满。

你可以看到这种差异,当你转到文件的属性时,' size'之间存在差异。和磁盘上的大小'。现在,当您检查磁盘的文件大小时,它会为您提供已用完集群的大小,而不是已添加文件的大小。

这里有一些更详细的信息: Why is There a Big Difference Between ‘Size’ and ‘Size on Disk’?