Размер объекта открытого файла - PullRequest
51 голосов
/ 12 ноября 2008

Есть ли способ найти размер файлового объекта, который в данный момент открыт?

В частности, я работаю с модулем tarfile для создания tarfile, но я не хочу, чтобы мой tarfile превышал определенный размер. Насколько я знаю, объекты tarfile являются объектами, подобными файлам, поэтому я думаю, что общее решение подойдет.

Ответы [ 5 ]

81 голосов
/ 12 ноября 2008
$ 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
>>>        
8 голосов
/ 12 ноября 2008

Ну, если файловый объект поддерживает метод Tell, вы можете сделать:

current_size = f.tell()

Это скажет вам, где он сейчас пишет. Если вы напишите последовательно, это будет размер файла.

В противном случае вы можете использовать возможности файловой системы, т. Е. os.fstat, как предлагают другие.

4 голосов
/ 12 ноября 2008

Если у вас есть дескриптор файла, вы можете использовать fstat, чтобы узнать размер, если есть. Более общим решением является поиск в конце файла и чтение его местоположения там.

1 голос
/ 17 августа 2016

Другое решение - использовать StringIO «если вы выполняете операции в памяти».

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

Теперь body ведет себя как файловый объект с различными атрибутами, такими как body.read().

body.len дает размер файла.

0 голосов
/ 01 июля 2018
f = open('myfile', 'rb')
print(len(f.read()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...