【问题标题】:Python os.stat(file_name).st_size versus os.path.getsize(file_name)Python os.stat(file_name).st_size 与 os.path.getsize(file_name)
【发布时间】:2013-09-28 12:30:54
【问题描述】:

我有两段代码都是为了做同样的事情——在一个循环中,直到一个文件被写入。它们都主要用于通过 FTP/SCP 传入的文件。

代码的一个版本使用os.stat()[stat.ST_SIZE]

size1,size2 = 1,0
while size1 != size2:
  size1 = os.stat(file_name)[stat.ST_SIZE]
  time.sleep(300)
  size2 = os.stat(file_name)[stat.ST_SIZE]

另一个版本使用os.path.getsize()

size1,size2 = 0,0
while True:
  size2 = os.path.getsize(file_name)
  if size1 == size2:
    break
  else:
    time.sleep(300)
    size1 = size2

我见过多个使用第一种方法报告大小相同但文件实际上仍在增长的实例。 os.stat() 会错误地报告而os.path.getsize() 不会有一些根本原因吗?我没有看到任何错误或异常再次出现。

【问题讨论】:

    标签: python python-2.6


    【解决方案1】:

    在 CPython 2.6 和 2.7 中,os.path.getsize() 实现如下:

    def getsize(filename):
        """Return the size of a file, reported by os.stat()."""
        return os.stat(filename).st_size
    

    由此看来,似乎没有理由期望这两种方法的行为会有所不同(可能是由于代码中循环的不同结构)。

    【讨论】:

    • 嗯,很奇怪。我将不得不更深入地查看其余代码,但这很高兴知道。谢谢!
    • “在 CPython 2.6 和 2.7 中”在 Python 3 中仍然如此:github.com/python/cpython/blob/…
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2015-04-22
    • 1970-01-01
    • 2011-10-04
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多