Другие ответы работают для реальных файлов, но если вам нужно что-то, что работает для «файловых объектов», попробуйте это:
# f is a file-like object.
f.seek(0, os.SEEK_END)
size = f.tell()
Это работает для реальных файлов и StringIO, в моем ограниченном тестировании,(Python 2.7.3.) API "file-like object", конечно, не совсем строгий интерфейс, но документация API предполагает, что файловые объекты должны поддерживать seek()
и * 1007.*.
Редактировать
Еще одно различие между этим и os.stat()
заключается в том, что вы можете stat()
файл, даже если у вас нет разрешения на его чтение.Очевидно, что подход поиска / сообщения не будет работать, если у вас нет разрешения на чтение.
Редактировать 2
По предложению Джонатона, вот параноидальная версия.(Приведенная выше версия оставляет указатель файла в конце файла, поэтому, если вы попытаетесь прочитать файл, вы получите ноль байтов назад!)
# f is a file-like object.
old_file_position = f.tell()
f.seek(0, os.SEEK_END)
size = f.tell()
f.seek(old_file_position, os.SEEK_SET)