我正在创建一个基本的 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)
当在我的一个 HDD 上执行此操作时,Python 表示总共有 23,328,445,304 字节的数据 (21.7 GB)。但是,当我进入 Windows 中的驱动器时,它显示有 23,536,922,624 字节的数据 (21.9 GB)。为什么会有这种差异?
我手工计算,并使用 Windows 用于从字节转换为 gibibytes 的相同公式 (gibibytes = bytes/1024**3
),我仍然少了 0.2 GB。为什么 Python 发现的数据较少?
最佳答案
使用 os.path.getsize(...) 你可以获得文件的实际大小。 但是 NTFS、FAT32……文件系统使用集群在其中存储数据,因此它们不会被完全填满。
您可以看到这种差异,当您转到文件的属性时,“大小”和“磁盘上的大小”之间存在差异。现在,当您检查磁盘的文件大小时,它会为您提供已用完的簇的大小,而不是加起来的文件的大小。
这里有一些更详细的信息: Why is There a Big Difference Between ‘Size’ and ‘Size on Disk’?
https://stackoverflow.com/questions/43700994/