python-3.x - 为什么 Python 找到与 Windows 不同的文件大小?

我正在创建一个基本的 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/

相关文章:

list - 类型 ('a -> ' b) list 的函数 -> OCaml 中的 'a -> '

pymc3 - BetaBinomial 和 "Beta and Binomial"之间的区别

visual-c++ - 访问 CBitmap 对象中的单个像素

react-native - redux-observable 获取当前位置

angularjs-material - 如何翻译 md-datepickers "Invalid

pandas - Pyspark - 如何回填 DataFrame?

haskell - 在 where 子句中指定函数的类型

nginx - 使用 logrotate 容器化 nginx 日志轮换

wifi - Arduino 非阻塞 Wifi 连接

centos7 - 在 LVM 之上扩展 GlusterFS