os.path.getsize(path)
和os.stat
之间的区别是什么?哪一个最好在python 3中使用?我们什么时候使用它们?为什么我们有两个相同的解决方案?
我找到this回答,但我无法理解这句话的含义:
由此可以清楚地看出,没有理由期望这两种方法的行为不同(除非您的代码中的循环结构不同)
具体为什么我们有两种方法,有什么不同?
答案 0 :(得分:1)
您要链接的答案显示一个人调用另一个:
def getsize(filename):
"""Return the size of a file, reported by os.stat()."""
return os.stat(filename).st_size
从根本上说,这两个函数都在使用os.stat
。
为什么呢?可能是因为他们在两个不同的包path
和stat
中有类似的需求,并且不想重复代码。
答案 1 :(得分:1)
stat
是一个POSIX系统调用(在Linux,Unix甚至Windows上都可用),它返回一堆信息(大小,类型,保护位......)
Python必须在某个时刻调用它才能获得大小,但是没有系统调用来只获得 的大小。
所以它们在性能方面是相同的(可能在stat
时速度更快,但这只是一个函数调用,因此不是I / O相关的)。这只是os.path.getsize
更容易编写。
说,为了能够调用os.path.getsize
,你必须确保该路径实际上是一个文件。在目录上调用时,getsize
会返回一些值(在Windows上测试),这可能与节点的大小有关,因此您必须先使用os.path.isfile
:另一次调用os.stat
最后,如果要最大限度地提高性能,则必须使用os.stat
,检查信息以查看路径是否为文件,然后使用st_size
信息。这样你只需要调用stat
一次。
如果您使用os.walk
来扫描目录,则会遇到更隐蔽的stat
调用,因此请查看os.scandir
(Python 3.5)。
相关:Faster way to find large files with Python?
前副本:Python os.stat(file_name).st_size versus os.path.getsize(file_name)但问题(和答案)不同