Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Size of an open file object

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.

like image 828
strider1551 Avatar asked Nov 12 '08 11:11

strider1551


People also ask

What is an open file object?

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.

How to check the size of a file in Python?

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 .


2 Answers

$ 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.

like image 166
Vinko Vrsalovic Avatar answered Sep 22 '22 16:09

Vinko Vrsalovic


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.

like image 37
PierreBdR Avatar answered Sep 19 '22 16:09

PierreBdR