在MacOS上os.path.getsize vs du -sh

时间:2019-06-21 11:36:26

标签: python-3.x macos du

我想在python中以MB为单位测量单个文件的大小。

使用python:

def get_size_in_mb(filepath):
    size_in_bytes = os.path.getsize(filepath)
    size_in_mb = size_in_bytes // (1024*1024)
    return size_in_mb

使用bash:

du -sh Ue3Amb-A-P0.mp4

第二种方法分别提供112 MB和前103 MB。

据我所知,基于这个答案的差异不能太大: python Mac OS : os.path.getsize returns different value than du -ks?

1 个答案:

答案 0 :(得分:0)

文件可能具有扩展属性。这是与文件关联的其他数据,不是其正常数据的一部分。

正常数据的大小是由st_size系统调用填充的struct stat结构的stat()字段所报告的大小。但是,文件的总大小(包括普通数据和扩展属性)都包含在st_blocks字段中。

您可以阅读the source code for macOS's du implementation。对于小于2TB的文件,它将使用文件的块大小。

我认为Python正在使用st_size

通过将ls -l@s应用于文件,可以查看扩展属性的大小。