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")
23
автор: Jonathan Works
Вычисление размера каталога с помощью Python?
следующий скрипт печатает размер каталога всех подкаталогов для указанного каталога. Он также пытается извлечь выгоду (если это возможно) из кэширования вызовов рекурсивных функций. Если аргумент опущен, скрипт будет работать в текущем каталоге. Выходные данные сортируются по размеру каталога от самых больших до самых маленьких. Так вы можете приспособить его для ваших потребностей.
PS я использовал рецепт 578019 для показа размера каталога в удобном для человека формате (http://code.activestate.com/recipes/578019/)
from __future__ import print_function import os import sys import operator def null_decorator(ob): return ob if sys.version_info >= (3,2,0): import functools my_cache_decorator = functools.lru_cache(maxsize=4096) else: my_cache_decorator = null_decorator start_dir = os.path.normpath(os.path.abspath(sys.argv[1])) if len(sys.argv) > 1 else '.' @my_cache_decorator def get_dir_size(start_path = '.'): total_size = 0 if 'scandir' in dir(os): # using fast 'os.scandir' method (new in version 3.5) for entry in os.scandir(start_path): if entry.is_dir(follow_symlinks = False): total_size += get_dir_size(entry.path) elif entry.is_file(follow_symlinks = False): total_size += entry.stat().st_size else: # using slow, but compatible 'os.listdir' method for entry in os.listdir(start_path): full_path = os.path.abspath(os.path.join(start_path, entry)) if os.path.isdir(full_path): total_size += get_dir_size(full_path) elif os.path.isfile(full_path): total_size += os.path.getsize(full_path) return total_size def get_dir_size_walk(start_path = '.'): total_size = 0 for dirpath, dirnames, filenames in os.walk(start_path): for f in filenames: fp = os.path.join(dirpath, f) total_size += os.path.getsize(fp) return total_size def bytes2human(n, format='%(value).0f%(symbol)s', symbols='customary'): """ (c) http://code.activestate.com/recipes/578019/ Convert n bytes into a human readable string based on format. symbols can be either "customary", "customary_ext", "iec" or "iec_ext", see: http://goo.gl/kTQMs >>> bytes2human(0) '0.0 B' >>> bytes2human(0.9) '0.0 B' >>> bytes2human(1) '1.0 B' >>> bytes2human(1.9) '1.0 B' >>> bytes2human(1024) '1.0 K' >>> bytes2human(1048576) '1.0 M' >>> bytes2human(1099511627776127398123789121) '909.5 Y' >>> bytes2human(9856, symbols="customary") '9.6 K' >>> bytes2human(9856, symbols="customary_ext") '9.6 kilo' >>> bytes2human(9856, symbols="iec") '9.6 Ki' >>> bytes2human(9856, symbols="iec_ext") '9.6 kibi' >>> bytes2human(10000, "%(value).1f %(symbol)s/sec") '9.8 K/sec' >>> # precision can be adjusted by playing with %f operator >>> bytes2human(10000, format="%(value).5f %(symbol)s") '9.76562 K' """ SYMBOLS = { 'customary' : ('B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'), 'customary_ext' : ('byte', 'kilo', 'mega', 'giga', 'tera', 'peta', 'exa', 'zetta', 'iotta'), 'iec' : ('Bi', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'), 'iec_ext' : ('byte', 'kibi', 'mebi', 'gibi', 'tebi', 'pebi', 'exbi', 'zebi', 'yobi'), } n = int(n) if n < 0: raise ValueError("n < 0") symbols = SYMBOLS[symbols] prefix = {} for i, s in enumerate(symbols[1:]): prefix[s] = 1 << (i+1)*10 for symbol in reversed(symbols[1:]): if n >= prefix[symbol]: value = float(n) / prefix[symbol] return format % locals() return format % dict(symbol=symbols[0], value=n) ############################################################ ### ### main () ### ############################################################ if __name__ == '__main__': dir_tree = {} ### version, that uses 'slow' [os.walk method] #get_size = get_dir_size_walk ### this recursive version can benefit from caching the function calls (functools.lru_cache) get_size = get_dir_size for root, dirs, files in os.walk(start_dir): for d in dirs: dir_path = os.path.join(root, d) if os.path.isdir(dir_path): dir_tree[dir_path] = get_size(dir_path) for d, size in sorted(dir_tree.items(), key=operator.itemgetter(1), reverse=True): print('%s\t%s' %(bytes2human(size, format='%(value).2f%(symbol)s'), d)) print('-' * 80) if sys.version_info >= (3,2,0): print(get_dir_size.cache_info())
пример вывода:
37.61M .\subdir_b 2.18M .\subdir_a 2.17M .\subdir_a\subdir_a_2 4.41K .\subdir_a\subdir_a_1 ---------------------------------------------------------- CacheInfo(hits=2, misses=4, maxsize=4096, currsize=4)
EDIT: перемещен null_decorator выше, как рекомендовал user2233949
Как проверить размер файла в 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 предполагает, что file-like объекты должны поддерживать 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)
Автор: Mark E. Haase Размещён: 29.09.2013 03:41 Получить размер файла в python тремя способами
Существуют разные методы получения размера файла в python, и в этой статье объясняются 3 из этих методов с примерами.
Определение размера файла становится важным, когда вы хотите отслеживать определенный файл на предмет ограничения размера или когда вы хотите упорядочить файлы в каталоге на основе их размера.
Модуль Python
os.path
предоставляет функцию getsize
, которая принимает путь к файлу в качестве аргумента и возвращает размер файла в байтах.Пример,
import os # получаем размер файла размер = os.path.getsize ('f: /file.txt') print ('Размер файла', size, 'bytes')
Приведенный выше код дает следующий результат
Размер файла 760 байт
Метод 2: Использование функции statМодуль
os
Python предоставляет stat
, которая принимает путь в качестве аргумента. Этот путь может быть строкой или объектом пути и возвращает структуру, содержащую статистические данные о предоставленном пути. Эта структура имеет множество свойств, из которых свойство st_size
содержит размер файла (в байтах), присутствующего по указанному пути.
Пример,
import os # получить статистику файла stats = os.stat ('f: /file.txt') print ('Размер файла', stats.st_size, 'bytes')
Вывод этого кода следующий
Размер файла 760 байт
Если вы распечатываете значение, возвращаемое функцией os.stats
, тогда вы получите что-то вроде этого.
os.stat_result (st_mode = 33206, st_ino = 562949953421562, st_dev = 101961010, st_nlink = 1, st_uid = 0, st_gid = 0, st_size = 760, st_atime = 1554137744, st_mtime = 9353000, st_mtime = 9353000 = 15541377) Notice = 9351377 он имеет свойство
st_size
.
Метод 3: Использование файлового объекта
Откройте файл, размер которого необходимо определить с помощью функции open
, и назначьте возвращаемый объект переменной. Возвращенный объект действует как дескриптор файла и может использоваться для различных операций обработки файлов.
Узнайте, как читать файл на Python , здесь .
Как только мы получим объект, указывающий на файл, необходимо предпринять следующие шаги, чтобы узнать размер файла с помощью этого метода.
- Первоначально, когда файл открыт, курсор файла указывает на начало файла. Файловый объект имеет метод
seek
, который используется для установки курсора в желаемое место.
Он принимает 2 аргумента: первый - это начальное положение, а второй - конечное положение, в которое будет помещен курсор.
Если первый аргумент не указан, то по умолчанию он равен 0, что означает начало файла. - Установите курсор в конец файла, используя метод
seek
, задав ему 0 в качестве начального значения иos.SEEK_END
в качестве конечного значения, гдеSEEK_END
- это константа, это модульos
и отмечает конец файл. - Файловый объект имеет метод
tell
, который возвращает текущую позицию курсора. Это количество байтов, на которое переместился курсор. - Таким образом, когда вы помещаете файловый курсор в конец файла, метод
tell
фактически вернет количество байтов в файле, которое также является размером файла.
Пример,
# открыть файл для чтения f = открытый ('f: /file.txt') # перемещаем курсор файла в конец f.seek (0, os.SEEK_END) # получить текущую позицию курсора print ('Размер файла', f.tell (), 'байты')
Вывод этого кода
Размер файла 760 байтов
Надеюсь, этот пост поможет вам в вычислении размера файла с использованием Python.
4.Как проверить размер файлов в каталоге с помощью Python?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
Как я могу получить размер файла по ссылке, не загружая его в python?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
python - как узнать длину файла в python3?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд
Расчет размера каталога с помощью Python?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
как уменьшить размер файла изображения в Python?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя