os.path.getsize()没有给出OSX上文件的真实大小

时间:2017-08-13 18:26:00

标签: python macos python-3.x

我正在开发OSX,我的书中指出:

  

调用os.path.getsize(path)将返回path参数中文件的大小(以字节为单位)。例如:

os.path.getsize('C:\\Windows\\System32\\calc.exe'`)
> 776192

它指出os.path.getsize()给出的是以字节为单位的大小,但是当我尝试在桌面上找到文件夹的大小时,它会产生奇怪的结果。

桌面上有一个文件,即音乐。我在shell中编写了这段代码:

os.path.getsize('/Users/apple/Desktop/Music')
> 510

这意味着Music的大小必须为510字节,但大小为1.32GB!

2 个答案:

答案 0 :(得分:1)

这是因为您要求的是目录本身的大小,而不是其内容的大小。 Unix(OSX)中的目录被认为是包含元数据的特殊文件;描述文件系统上的目录的信息。 .getsize()告诉你的是元数据只占用510个字节。

请注意,本书提供的第一个示例是询问名为calc.exe的文件的大小,而不是目录。

要获取目录内容的总大小,您需要递归遍历整个层次结构并在每个文件上调用getsize()。这是一个单行解决方案:

sum([os.path.getsize(f) for f in os.listdir('.') if os.path.isfile(f)])

其中'.'是您尝试获取大小的目录的基本路径。

答案 1 :(得分:0)

您只要求目录分配的大小。不是其中的内容。 .debug_line 可以得到文件的大小。

注意:文件夹实际上被视为"空"如果它只包含子文件夹而没有文件。