Python 如何在不破坏文件对象的情况下检查文件对象的大小?

Python 如何在不破坏文件对象的情况下检查文件对象的大小?,python,seek,werkzeug,file-storage,Python,Seek,Werkzeug,File Storage,我有一个werkzeug.datastructures.FileStorage类的对象(称为“img”)(这个对象表示一个文件)。我需要把这个文件保存在磁盘上。我可以用以下方法来做: img.save(fname) img.seek(0, os.SEEK_END) size = img.tell() 它很好用。但是在保存文件之前,我需要检查它的大小。我是这样做的: img.save(fname) img.seek(0, os.SEEK_END) size = img.tell() 它也很

我有一个
werkzeug.datastructures.FileStorage
类的对象(称为“img”)(这个对象表示一个文件)。我需要把这个文件保存在磁盘上。我可以用以下方法来做:

img.save(fname)
img.seek(0, os.SEEK_END)
size = img.tell()
它很好用。但是在保存文件之前,我需要检查它的大小。我是这样做的:

img.save(fname)
img.seek(0, os.SEEK_END)
size = img.tell()
它也很好用。但问题是,我无法在检查文件大小后保存该文件。或者,更准确地说,我在磁盘上得到一个文件,但如果我以前检查过它的大小,它是空的


如何在不“销毁”文件的情况下检查文件大小?

而不是查找并告诉替换为:

import os
img.flush()
size = os.fstat(img.fileno()).st_size

您忘记在保存文件之前查找文件的开头,因此文件为空

#seek to the end of the file to tell its size
img.seek(0, os.SEEK_END)
size = img.tell()

#seek to its beginning, so you might save it entirely
img.seek(0)    
img.save(fname)

Werkzeug的文件存储具有
content\u length
属性:


如果使用os.stat或os.path.getsize(path)会怎么样?如果我使用
os.stat(value).st_size
I get:
TypeError:强制使用Unicode:需要字符串或缓冲区,找到文件存储
但是,请注意
标题中发送的内容长度。通常不可用
。只有上传者正确设置了
内容长度
标题,这才有帮助。