打开文件对象的大小

时间:2008-11-12 11:49:47

标签: python

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

具体来说,我正在使用tarfile模块来创建tarfiles,但我不希望我的tarfile超过一定的大小。据我所知,tarfile对象是类似文件的对象,所以我想通用的解决方案是可行的。

5 个答案:

答案 0 :(得分:81)

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

答案 1 :(得分:8)

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

current_size = f.tell()

这会告诉你它目前是在写作。如果以顺序方式书写,则这将是文件的大小。

否则,您可以使用文件系统功能,即其他人建议的os.fstat

答案 2 :(得分:4)

如果您有文件描述符,则可以使用fstat查找大小(如果有)。更通用的解决方案是寻找文件的末尾,并在那里读取它的位置。

答案 3 :(得分:1)

另一个解决方案是使用StringIO"如果你正在进行内存操作"。

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

现在body的行为类似于具有body.read()等各种属性的文件对象。

body.len给出文件大小。

答案 4 :(得分:-1)

f = open('myfile', 'rb')
print(len(f.read()))