Python os.stat (имя файла).размер st против ос.путь.getsize не имя(файл )
у меня есть два фрагмента кода, которые предназначены для одного и того же-сидеть в цикле, пока файл не будет записан. Они оба в основном используются для файлов, поступающих через 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()
не будет? Я не вижу никаких ошибок или исключений.
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
из этого кажется довольно ясным, что нет причин ожидать, что два подхода будут вести себя по-разному (за исключением, возможно, из-за разных структур циклов в вашем коде).