Размер открытого файлового объекта
Есть ли способ найти размер открытого файлового объекта?
В частности, я работаю с модулем tarfile для создания файлов tarfiles, но не хочу, чтобы мой tarfile превышал определенный размер. Насколько я знаю, объекты tarfile являются файлоподобными объектами, поэтому я предполагаю, что общее решение будет работать.
Ответы
Ответ 1
$ 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
>>>
Ответ 2
Хорошо, если объект файла поддерживает метод tell, вы можете сделать:
current_size = f.tell()
Это скажет вам, что он в настоящее время пишет. Если вы будете писать последовательно, это будет размер файла.
В противном случае вы можете использовать возможности файловой системы, т.е. os.fstat
, как это было предложено другими.
Ответ 3
Если у вас есть файловый дескриптор, вы можете использовать fstat
, чтобы узнать размер, если таковой имеется. Более общим решением является поиск конца файла и чтение его местоположения.
Ответ 4
Другое решение использует StringIO "если вы выполняете операции с оперативной памятью".
with open(file_path, 'rb') as x:
body = StringIO()
body.write(x.read())
body.seek(0, 0)
Теперь body
ведет себя как файловый объект с различными атрибутами типа body.read()
.
body.len
указывает размер файла.