Другие ответы работают для реальных файлов, но если вам нужно что-то, что работает для "файлоподобных объектов", попробуйте это:
# f is a file-like object. f.seek(0, os.SEEK_END) size = f.tell()
В моем ограниченном тестировании это работает для реальных файлов и StringIO. (Python 2.7.3.) API "файлоподобных объектов" на самом деле, конечно, не является строгим интерфейсом, но документация API предполагает, что файлоподобные объекты должны поддерживать seek() и tell().
Редактировать
Еще одно различие между этим и 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)
Ответ 4
import os
defconvert_bytes(num): """ this function will convert bytes to MB.... GB... etc """ for x in ['bytes', 'KB', 'MB', 'GB', 'TB']: if num < 1024.0: return"%3.1f %s" % (num, x) num /= 1024.0
deffile_size(file_path): """ this function will return the file size """ if os.path.isfile(file_path): file_info = os.stat(file_path) return convert_bytes(file_info.st_size)
# Lets check the file size of MS Paint exe # or you can use any file path file_path = r"C:\Windows\System32\mspaint.exe" print file_size(file_path)