有没有办法找到当前打开的文件对象的大小?
具体来说,我正在使用tarfile模块来创建tarfiles,但我不希望我的tarfile超过一定的大小.据我所知,tarfile对象是类文件对象,所以我想通用解决方案是可行的.
$ 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()
那将告诉你它是否正在写作.如果以顺序方式写入,则这将是文件的大小.
否则,您可以使用文件系统功能,即os.fstat
按照其他人的建议.
如果有文件描述符,则可以使用它fstat
来找到大小(如果有)。一个更通用的解决方案是寻找文件的结尾,然后在该文件中读取其位置。