Is there a way to find the size of a file object that is currently open?
Specifically, I am working with the tarfile module to create tarfiles, but I don't want my tarfile to exceed a certain size. As far as I know, tarfile objects are file-like objects, so I imagine a generic solution would work.
The OpenFile object manages the details of accessing the contents of a specific file. Opening a file for access returns a pointer to an OpenFile object that can be used in subsequent read and write operations.
Using stat() from the os module, you can get the details of a file. Use the st_size attribute of stat() method to get the file size. The unit of the file size is byte .
$ 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
Adding ChrisJY's idea to the example
>>> import os >>> os.fstat(f.fileno()).st_size 179218L >>>
Note: Based on the comments, f.seek(0, 2)
is must before calling f.tell()
, without which it would return a size of 0. The reason is that f.seek(0, 2)
moves the file object's position to the end of the file.
Well, if the file object support the tell method, you can do:
current_size = f.tell()
That will tell you were it is currently writing. If you write in a sequential way this will be the size of the file.
Otherwise, you can use the file system capabilities, i.e. os.fstat
as suggested by others.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With