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

os.path.getsize(path)os.stat有什么区别?哪一个最适合在python 3中使用?以及何时使用它们?为什么我们有两个相同的解决方案?
我找到了this答案,但我不明白这句话的意思:

由此看来,似乎很清楚,没有理由期望这两种方法的行为有所不同(也许是由于代码中循环结构的不同)

特别是为什么我们有两种方法,有什么不同?

参考方案

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

Python必须在某个时候调用它来获取大小(and it does),但是没有系统调用来仅获取大小。

因此,它们在性能上是相同的(使用stat可能更快,但这仅是1个函数调用,因此与I / O不相关)。只是os.path.getsize更容易编写。

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

最后,如果要最大化性能,则必须使用os.stat,检查信息以查看path是否为文件,然后使用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)看起来像重复的,但问题(和答案)不同

os.path.splitext(file.txt.gz)转换成(file,.txt.gz) - python

目前,我的文件以/path_to_file/file.txt.gz结尾。我想拆分提取文件名(.txt.gz之前)。x = os.path.basename("/path_to_file/file.txt.gz") 给我file.txt.gz 而os.path.splitext("file.txt.gz") 给我(�…

显示文件和大小缓慢命令 - python

此命令获取所有文件和大小find . -type f | xargs -I x du -s x > /tmp/asd 比这个python脚本慢1000倍import os for dirpath, dirnames, filenames in os.walk("."): for f in filenames: print(f) fp…

如何将Python安装目录打印到输出? - python

假设Python安装在该位置 C:\ TOOLS \ COMMON \ python \ python252我想在程序输出中打印此位置。请让我知道我可以这样做。 python大神给出的解决方案 您可以使用import sys, os os.path.dirname(sys.executable) 但请记住,与在Unix系统中相比,程序的“安装”通常是沿着以下…

比较python中的两个路径 - python

考虑:path1 = "c:/fold1/fold2" list_of_paths = ["c:\\fold1\\fold2","c:\\temp\\temp123"] if path1 in list_of_paths: print "found" 我希望if语句返回True,…

如何在python中按创建日期对目录列表进行排序? - python

获取目录中所有文件的列表的最佳方法是什么,按日期排序[创建|修改],在Windows机器上使用python? 参考方案 这是@Greg Hewgill's answer的更详细的版本。这是最符合问题要求的。它区分了创建日期和修改日期(至少在Windows上如此)。#!/usr/bin/env python from stat import S_IS…