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:需要字符串或缓冲区,找到文件存储
但是,请注意标题中发送的内容长度。通常不可用
。只有上传者正确设置了内容长度
标题,这才有帮助。