为啥 Python 会找到与 Windows 不同的文件大小?
Posted
技术标签:
【中文标题】为啥 Python 会找到与 Windows 不同的文件大小?【英文标题】:Why does Python find different file sizes to Windows?为什么 Python 会找到与 Windows 不同的文件大小? 【发布时间】:2017-04-29 22:17:17 【问题描述】:我正在创建一个基本的 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 = bytes / 1024**3
) 的相同公式,我仍然到达 0.2 GB。为什么 Python 找到的数据更少?
【问题讨论】:
【参考方案1】:使用 os.path.getsize(...) 您可以获得文件的实际大小。 但是 NTFS、FAT32、...文件系统使用集群在其中存储数据,因此它们没有被完全填满。
您可以看到这种差异,当您转到文件的属性时,“大小”和“磁盘大小”之间存在差异。现在,当您检查磁盘的文件大小时,它会为您提供已用完集群的大小,而不是添加的文件大小。
这里有一些更详细的信息: Why is There a Big Difference Between ‘Size’ and ‘Size on Disk’?
【讨论】:
有没有办法从 python 中获取“大小”和“磁盘上的大小”?以上是关于为啥 Python 会找到与 Windows 不同的文件大小?的主要内容,如果未能解决你的问题,请参考以下文章
Python append() 与列表上的 + 运算符,为啥这些会给出不同的结果?
Python append() 与列表上的 + 运算符,为啥这些会给出不同的结果?
为啥 Python 文件锁库会删除 Windows 上的锁文件,而不是 UNIX?