os.path.getsize(path) 或 os.stat

Ali*_*aie 8 python python-3.x

os.path.getsize(path)和之间有什么不同os.stat?哪一个最适合在 python 3 中使用?我们什么时候使用它们?为什么我们有两个相同的解决方案?我找到了这个答案,但我无法理解这句话的含义:

由此看来,似乎很清楚没有理由期望这两种方法表现不同(除非可能是由于代码中循环的不同结构)

具体来说,为什么我们有两种方法,有什么不同?

Jea*_*bre 7

stat是一个 POSIX 系统调用(可在 Linux、Unix 甚至 Windows 上使用),它返回一堆信息(大小、类型、保护位...)

Python 必须在某个时刻调用它来获取大小(确实如此),但没有系统调用来获取大小。

所以它们在性能方面是相同的(可能更快stat,但只是多了 1 个函数调用,所以与 I/O 无关)。只是os.path.getsize写起来比较简单。

也就是说,为了能够调用,os.path.getsize您必须确保路径实际上是一个文件。当在目录上调用时,getsize返回一些值(在 Windows 上测试),该值可能与节点的大小有关,因此您必须os.path.isfile首先使用:再次调用os.stat.

最后,如果你想最大化性能,你必须使用os.stat,检查 infos 看看 path 是否是一个文件,然后使用该st_size信息。这样你stat就只需要调用一次。

如果您使用os.walk扫描目录,您会遇到更多隐藏stat调用,因此请查看os.scandir(Python 3.5)。

有关的: