实际上我想到了三种方法来确定文件大小:
那么确定文件大小的实际正确方法是什么?最糟糕的方法是什么? 或者这根本不重要,因为到最后都是一样的?
(我可以想象第一种方法在处理非常大的文件时会出现问题,而其他两种方法则没有。)
如果您根本不需要文件的内容,第一种方法将是一种浪费。您的其他两个选择都可以。
os.path.getsize()
使用 os.stat()
来自 genericpath.py
def getsize(filename):
"""Return the size of a file, reported by os.stat()."""
return os.stat(filename).st_size
如果不明显,
os.path.getsize()
来自 genericpath.py。
>>> os.path.getsize.__code__
<code object getsize at 0x1d457b0, file "/usr/lib/python2.7/genericpath.py", line 47>
方法 1 是最慢的方法。不要使用它,除非您稍后需要文件的全部内容作为字符串。
方法 2 和 3 是最快的,因为它们甚至不需要打开文件。
使用
f.seek(os.SEEK_END)
和 f.tell()
需要打开文件,并且可能比 2 和 3 慢一点,除非您无论如何都要打开文件。
当没有其他程序写入文件时,所有方法都会给出相同的结果。如果代码运行时文件正在修改中,seek+tell 有时可以为您提供比 2&3 更最新的答案。
不。 1肯定是最差的。如果有的话,最好是eek()和tell(),但这不如其他两个。
不。 2 和没有。在我看来,3个同样没问题。我想不是。 3 读起来更清晰一些,但这可以忽略不计。