打开的文件对象的大小

有没有办法find当前打开的文件对象的大小?

具体来说,我正在与tarfile模块来创buildtarfiles,但我不希望我的tarfile超过一定的大小。 据我所知,tarfile对象是类文件对象,所以我想一个通用的解决scheme将工作。

$ ls -la chardet-1.0.1.tgz -rwxr-xr-x 1 vinko vinko 179218 2008-10-20 17:49 chardet-1.0.1.tgz $ python Python 2.5.1 (r251:54863, Jul 31 2008, 22:53:39) [GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> f = open('chardet-1.0.1.tgz','rb') >>> f.seek(0,2) >>> f.tell() 179218L 

把ChrisJY的想法加到这个例子中

 >>> import os >>> os.fstat(f.fileno()).st_size 179218L >>> 

那么,如果文件对象支持tell方法,你可以这样做:

 current_size = f.tell() 

这将告诉你,它是目前正在写作。 如果以顺序写入,这将是文件的大小。

否则,您可以使用文件系统function,即按其他人的build议操作os.fstat

如果你有文件描述符,你可以使用fstat来查找大小,如果有的话。 更通用的解决scheme是寻找文件的结尾,并在那里读取它的位置。

另一种解决scheme是使用StringIO“如果你正在执行内存操作”。

 with open(file_path, 'rb') as x: body = StringIO() body.write(x.read()) body.seek(0, 0) 

现在, body行为就像一个具有各种属性的文件对象,比如body.read()

body.len给出文件大小。