как узнать размер файла питон

Как получить расширение и размер файла в Python

Мы можем использовать функцию splitext() модуля os в Python, чтобы получить расширение файла. Эта функция разбивает путь к файлу на кортеж, имеющий два значения – корень и расширение.

Вот простая программа для получения расширения файла на Python.

как узнать размер файла питон. img 689. как узнать размер файла питон фото. как узнать размер файла питон-img 689. картинка как узнать размер файла питон. картинка img 689.

Получение расширения файла с помощью модуля Pathlib

Мы также можем использовать модуль pathlib, чтобы получить расширение файла. Этот модуль был представлен в версии Python 3.4.

Всегда лучше использовать стандартные методы, чтобы получить расширение файла. Если вы уже используете модуль os, используйте метод splitext(). Для объектно-ориентированного подхода используйте модуль pathlib.

Получение размера файла

Мы можем получить размер файла в Python, используя модуль os.

Модуль os имеет функцию stat(), где мы можем передать имя файла в качестве аргумента. Эта функция возвращает структуру кортежа, содержащую информацию о файле. Затем мы можем получить его свойство st_size, чтобы получить размер файла в байтах.

Вот простая программа для печати размера файла в байтах и мегабайтах.

как узнать размер файла питон. img 687. как узнать размер файла питон фото. как узнать размер файла питон-img 687. картинка как узнать размер файла питон. картинка img 687.

Если вы посмотрите на функцию stat(), мы можем передать еще два аргумента: dir_fd и follow_symlinks. Однако они не реализованы для Mac OS.

Вот обновленная программа, в которой я пытаюсь использовать относительный путь, но выдает NotImplementedError.

Источник

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

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

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

Синтаксис:
Параметры:
Возвращаемое значение:
Описание:
Примеры использования:

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

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

Edit

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

Изменить 2

В предположении Джонатона, здесь параноидальная версия. (Версия выше оставляет указатель файла в конце файла, поэтому, если вы попытаетесь прочитать из файла, вы получите нулевые байты!)

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

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

Edit

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

Изменить 2

В предположении Джонатона, здесь параноидальная версия. (Версия выше оставляет указатель файла в конце файла, поэтому, если вы попытаетесь прочитать из файла, вы получите нулевые байты!)

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

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

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

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

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

автор: Jonathan Works

Вычисление размера каталога с помощью Python?

следующий скрипт печатает размер каталога всех подкаталогов для указанного каталога. Он также пытается извлечь выгоду (если это возможно) из кэширования вызовов рекурсивных функций. Если аргумент опущен, скрипт будет работать в текущем каталоге. Выходные данные сортируются по размеру каталога от самых больших до самых маленьких. Так вы можете приспособить его для ваших потребностей.

PS я использовал рецепт 578019 для показа размера каталога в удобном для человека формате (http://code.activestate.com/recipes/578019/)

EDIT: перемещен null_decorator выше, как рекомендовал user2233949

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

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

редактировать

Редактировать 2

По предложению Джонатона, вот параноидальная версия. (Приведенная выше версия оставляет указатель файла в конце файла, поэтому, если вы попытаетесь прочитать файл, вы получите ноль байтов назад!)

Автор: Mark E. Haase Размещён: 29.09.2013 03:41

Получить размер файла в python тремя способами

Существуют разные методы получения размера файла в python, и в этой статье объясняются 3 из этих методов с примерами.
Определение размера файла становится важным, когда вы хотите отслеживать определенный файл на предмет ограничения размера или когда вы хотите упорядочить файлы в каталоге на основе их размера.

Приведенный выше код дает следующий результат

Размер файла 760 байт

Эта структура имеет множество свойств, из которых свойство st_size содержит размер файла (в байтах), присутствующего по указанному пути.
Пример,

Вывод этого кода следующий

Размер файла 760 байт

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

Пример,

Размер файла 760 байтов

Надеюсь, этот пост поможет вам в вычислении размера файла с использованием Python.

Источник

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

Я загружаю весь каталог с веб-сервера. Это работает нормально, но я не могу понять, как получить размер файла перед загрузкой, чтобы сравнить, был ли он обновлен на сервере или нет. Можно ли это сделать так, как если бы я загружал файл с FTP-сервера?

@Jon: спасибо за быстрый ответ. Это работает, но размер файла на веб-сервере немного меньше, чем размер загружаемого файла.

Это как-то связано с преобразованием CR / LF?

8 ответов

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

Что я здесь не так делаю? Os.stat (). St_size не возвращает правильный размер?

Изменить: ОК, я понял, в чем проблема:

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

запрашивает решение на основе HEAD вместо GET (также печатает заголовки HTTP):

Использование

Это диктат, поэтому чтобы получить размер файла, вы должны urllibobject.info()[‘Content-Length’]

А чтобы получить размер локального файла (для сравнения), вы можете использовать команду os.stat ():

Размер файла отправляется как заголовок Content-Length. Вот как это сделать с помощью urllib:

Для подхода python3 (протестированного на 3.5) я бы порекомендовал:

@PabloG Относительно локальной / серверной разницы в размерах файлов

Ниже приводится пояснительное объяснение того, почему это может произойти:

Пример: когда файловая система разделена на блоки размером 512 байт, и нам нужно сохранить файл размером 600 байт, два блока будут заняты. Первый блок будет полностью использован, в то время как второй блок будет использовать только 88b, а оставшийся (512-88) b будет непригодным для использования, в результате чего размер файла на диске будет 1024b. Вот почему в Windows используются разные обозначения для «размера файла» и «размера на диске».

ПРИМЕЧАНИЕ: Существуют различные плюсы и минусы, которые приходят с меньшим / большим блоком FS, поэтому лучше поиграйте перед игрой с вашей файловой системой.

Также, если сервер, к которому вы подключаетесь, поддерживает его, посмотрите Etags и If-Modified-Since и If-None-Match.

Используя их, вы получите преимущества правил кэширования веб-сервера и вернете 304 статус не изменен. если содержание не изменилось.

Источник

Вычисление размера каталога с помощью Python?

прежде чем я заново изобрету это конкретное колесо, у кого-нибудь есть хорошая процедура для вычисления размера каталога с помощью Python? Было бы очень хорошо, если бы процедура отформатировала размер красиво в Mb/Gb и т. д.

24 ответов

это бросается в подкаталоги:

и oneliner для удовольствия с помощью os.listdir (не включает подкаталоги):

Обновлено Использовать os.путь.getsize не, это яснее, чем использование ОС.stat ().st_size метод.

спасибо ghostdog74 за указание на это!

обновить 2018

если вы используете Python 3.4 или предыдущий, вы можете использовать более эффективный walk метод, предоставленный третьей стороной scandir пакета. В Python 3.5 и позже этот пакет был включен в стандартную библиотеку и os.walk получил соответствующее увеличение производительности.

некоторые из предложенных до сих пор подходов реализуют рекурсию, другие используют оболочку или не будут производить аккуратно отформатированные результаты. Когда ваш код является одноразовым для платформ Linux,вы можете получить форматирование как обычно, включая рекурсию, в виде однострочного. За исключением print в последней строке, он будет работать на текущей версии python2 и python3 :

просто, эффективно и будет работать для файлов и многоуровневых каталогов:

немного поздно через 5 лет, но поскольку это все еще находится в хитлистах поисковых систем, это может помочь.

Источник

Использование памяти в Python

как узнать размер файла питон. 2f5bbdad55405645e515e0e79631cb64. как узнать размер файла питон фото. как узнать размер файла питон-2f5bbdad55405645e515e0e79631cb64. картинка как узнать размер файла питон. картинка 2f5bbdad55405645e515e0e79631cb64.

Сколько памяти занимает 1 миллион целых чисел?

Меня часто донимали размышление о том, насколько эффективно Python использует память по сравнению с другими языками программирования. Например, сколько памяти нужно, чтобы работать с 1 миллионом целых чисел? А с тем же количеством строк произвольной длины?
Как оказалось, в Python есть возможность получить необходимую информацию прямо из интерактивной консоли, не обращаясь к исходному коду на C (хотя, для верности, мы туда все таки заглянем).
Удовлетворив любопытство, мы залезем внутрь типов данных и узнаем, на что именно расходуется память.

Все примеры были сделаны в CPython версии 2.7.4 на 32 битной машине. В конце приведена таблица для потребности в памяти на 64 битной машине.

Необходимые инструменты

sys.getsizeof и метод __sizeof__()

Первый инструмент, который нам потребуется находится в стандартной библиотеки sys. Цитируем официальную документацию:

Возвращает размер объекта в байтах.
Если указано значение по умолчанию, то оно вернется, если объект не предоставляет способа получить размер. В противном случае возникнет исключение TypeError.
Getsizeof() вызывает метод объекта __sizeof__ и добавляет размер дополнительной информации, которая хранится для сборщика мусора, если он используется.

Алгоритм работы getsizeof(), переписанной на Python, мог бы выглядеть следующем образом:

Где PyGC_Head — элемент двойного связанного списка, который используется сборщиком мусора для обнаружения кольцевых ссылок. В исходном коде он представлен следующей структурой:

Размер PyGC_Head будет равен 12 байт на 32 битной и 24 байта на 64 битной машине.

Попробуем вызвать getsizeof() в консоли и посмотрим, что получится:

За исключением магии с проверкой флагов, все очень просто.
Как видно из примера, int и float занимают 12 и 16 байт соответственно. Str занимает 21 байт и еще по одному байту на каждый символ содержимого. Пустой кортеж занимает 12 байт, и дополнительно 4 байта на каждый элемент. Для простых типов данных (которые не содержат ссылок на другие объекты, и соответственно, не отслеживаются сборщиком мусора), значение sys.getsizeof равно значению, возвращаемого методом __sizeof__().

id() и ctypes.string_at

Теперь выясним, на что именно расходуется память.
Для этого нужно нам нужны две вещи: во-первых, узнать, где именно хранится объект, а во-вторых, получить прямой доступ на чтение из памяти. Несмотря на то, что Python тщательно оберегает нас от прямого обращения к памяти, это сделать все таки возможно. При этом нужно быть осторожным, так как это может привести к ошибке сегментирования.

Встроенная функция id() возвращает адрес памяти, где храниться начала объекта (сам объект является C структурой)

Чтобы считать данные по адресу памяти нужно воспользоваться функцией string_at из модуля ctypes. Ее официальное описание не очень подробное:

ctypes.string_at(адрес[, длина])
Это функция возвращает строку, с началом в ячейки памяти «адрес». Если «длина» не указана, то считается что строка zero-terminated,

Теперь попробуем считать данные по адресу, который вернул нам id():

Вид шестнадцатеричного кода не очень впечатляет, но мы близки к истине.

Модель Struct

Для того чтобы представить вывод в значения, удобные для восприятия, воспользуемся еще одним модулем. Здесь нам поможет функция unpack() из модуля struct.

struct
Этот модуль производит преобразование между значениями Python и структурами на C, представленными в виде строк.

struct.unpack(формат, строка)
Разбирает строку в соответствие с данным форматов. Всегда возвращает кортеж, даже если строка содержит только один элемент. Строка должна содержать в точности то количество информации, как описано форматом.

Форматы данных, которые нам потребуются.

символЗначение CЗначение PythonДлина на 32битной машине
ccharСтрока из одного символа1
iintint4
llongint4
Lunsigned longint4
ddoublefloat8

Теперь собираем все вместе и посмотрим на внутреннее устройство некоторых типов данных.

О формате значений несложно догадаться.

Первое число (373) — количество указателей, на объект.

Как видно, число увеличилось на единицу, после того как мы создали еще одну ссылку на объект.

Второе число (136770080) — указатель (id) на тип объекта:

Третье число (1) — непосредственно содержимое объекта.

Наши догадки можно подтвердить, заглянув в исходный код CPython

Здесь PyObject_HEAD — макрос, общий для всех встроенных объектов, а ob_ival — значение типа long. Макрос PyObject_HEAD добавляет счетчик количества указателей на объект и указатель на родительский тип объекта — как раз то, что мы и видели.

Float

Число с плавающей запятой очень похоже на int, но представлено в памяти C значением типа double.

В этом легко убедиться:

Строка (Str)

Строка представлена в виде массива символов, оканчивающимся нулевым байтом. Также в структуре строки отдельного сохраняется ее длина, хэш от ее содержания и флаг, определяющий, хранится ли она во внутреннем кэше interned.

Макрос PyObject_VAR_HEAD включает в себя PyObject_HEAD и добавляет значение long ob_ival, в котором хранится длина строки.

Четвертое значение соответствует хэшу от строки, в чем нетрудно убедиться.

Как видно, значение sstate равно 0, так что строка сейчас не кэшируется. Попробуем ее добавить в кэш:

Кортеж (Tuple)

Кортеж представлен в виде массива из указателей. Так как его использование может приводить к возникновению кольцевых ссылок, он отслеживается сборщиком мусора, на что расходуется дополнительная память (об этом нам напоминает вызов sys.getsizeof())

Структура tuple похоже на строку, только в ней отсутствуют специальные поля, кроме длины.

Как видим из примера, последние три элементы кортежа являются указателями на его содержимое.

Остальные базовые типы данных (unicode, list, dict, set, frozenset) можно исследовать аналогичным образом.

Что в итоге?

ТипИмя в CPythonформатФормат, для вложенных объектовДлина на 32bitДлина на 64bitПамять для GC*
IntPyIntObjectLLl1224
floatPyFloatObjectLLd1624
strPyStringObjectLLLli+c*(длина+1)21+длина37+длина
unicodePyUnicodeObjectLLLLlLL*(длина+1)28+4*длина52+4*длина
tuplePyTupleObjectLLL+L*длина12+4*длина24+8*длинаЕсть
listPyListObjectL*5L*длину20+4*длина40+8*длинаЕсть
Set/
frozenset
PySetObjectL*7+(lL)*8+lLLL* длина( 5 элементов) 100+8*длина( 5 элементов) 200+16*длинаЕсть
dictPyDictObjectL*7+(lLL)*8lLL*длина( 5 элементов) 124+12*длина( 5 элементов) 248+24*длинаЕсть

* Добавляет 12 байт на 32 битной машине и 32 байта на 64 битной машине

Мы видим, что простые типы данных в Python в два-три раза больше своих прототипов на C. Разница обусловлена необходимостью хранить количество ссылок на объект и указатель на его тип (содержимое макроса PyObject_HEAD). Частично это компенсируется внутренним кэшированием, который позволяет повторно использовать ранее созданные объекты (это возможно только для неизменяемых типов).

Для строк и кортежей разница не такая значительная — добавляется некоторая постоянная величина.

А списки, словари и множества, как правило, занимают больше на 1/3, чем необходимо. Это обусловлено реализацией алгоритма добавления новых элементов, который приносит в жертву память ради экономии времени процессора.

Итак, отвечаем на вопрос в начале статьи: чтобы сохранить 1 миллион целых чисел нам потребуется 11.4 мегабайт (12*10^6 байт) на сами числа и дополнительно 3.8 мегабайт (12 + 4 + 4*10^6 байт) на кортеж, которых будет хранить на них ссылки.

UPD: Опечатки.
UPD: В подзаголовке «1 миллион целых чисел», вместо «1 миллион простых чисел»

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *