Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Python как узнать размер файла


Функция getsize() модуля os.path в Python.

Получить размер файла в байтах.

Синтаксис:
import os.path os.path.getsize(path) 
Параметры:
  • path - путь к файлу или каталогу.
Возвращаемое значение:
  • int - размер файла в байтах.
Описание:

Функция getsize() модуля os.path возвращает размер файла в байтах, указанного в path. Если path не существует или недоступен, то поднимается исключение OSError.

Аргумент path может принимать байтовые или текстовые строки. Функция os.path.getsize() может принимать объект, представляющий путь к файловой системе, например такой как pathlib.PurePath.

Примеры использования:
>>> import os.path >>> os.path.getsize('/home/docs-python/os.path.txt') # 11828 >>> os.path.getsize(b'/home/docs-python/os.path.txt') # 11828 >>> os.path.getsize('/home/docs-python') # 4096 

Как проверить размер файла в Python? – 9 Ответов

Другие ответы работают на реальные файлы, но если вам нужно что-то, что работает для "файловых объектов", попробуйте следующее:

# 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() и tell().

Edit

Другое отличие между этим и os.stat() заключается в том, что вы можете stat() файл, даже если у вас нет разрешения на его чтение. Очевидно, что подход seek/tell не будет работать, если у вас нет разрешения на чтение.

Изменить 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) 

Как проверить размер файла в python? (python)

Другие ответы работают на реальные файлы, но если вам нужно что-то, что работает для "файловых объектов", попробуйте следующее:

# 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() и tell().

Edit

Другое отличие между этим и os.stat() заключается в том, что вы можете stat() файл, даже если у вас нет разрешения на его чтение. Очевидно, что подход seek/tell не будет работать, если у вас нет разрешения на чтение.

Изменить 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) 


Получить размер файла перед загрузкой в Python

я воспроизвел то, что вы видите:

import urllib, os link = "http://python.org" print "opening url:", link site = urllib.urlopen(link) meta = site.info() print "Content-Length:", meta.getheaders("Content-Length")[0] f = open("out.txt", "r") print "File on disk:",len(f.read()) f.close() f = open("out.txt", "w") f.write(site.read()) site.close() f.close() f = open("out.txt", "r") print "File on disk after download:",len(f.read()) f.close() print "os.stat().st_size returns:", os.stat("out.txt").st_size 

выводит это:

opening url: http://python.org Content-Length: 16535 File on disk: 16535 File on disk after download: 16535 os.stat().st_size returns: 16861 

что я здесь делаю не так? Это ОС.stat ().st_size не возвращает правильный размер?


изменить: Хорошо, я понял, в чем проблема:

import urllib, os link = "http://python.org" print "opening url:", link site = urllib.urlopen(link) meta = site.info() print "Content-Length:", meta.getheaders("Content-Length")[0] f = open("out.txt", "rb") print "File on disk:",len(f.read()) f.close() f = open("out.txt", "wb") f.write(site.read()) site.close() f.close() f = open("out.txt", "rb") print "File on disk after download:",len(f.read()) f.close() print "os.stat().st_size returns:", os.stat("out.txt").st_size 


вот результаты:

$ python test.py opening url: http://python.org Content-Length: 16535 File on disk: 16535 File on disk after download: 16535 os.stat().st_size returns: 16535 

убедитесь, что вы открываете оба файла для бинарного чтения/записи.

// open for binary write open(filename, "wb") // open for binary read open(filename, "rb")