Получение размера файла в Python
В работе с файлами на Python часто возникает необходимость получить размер файла. Это может быть полезно в различных случаях, например, при проверке доступного пространства на диске перед записью больших файлов, или при оценке прогресса обработки больших данных.
Python предоставляет несколько способов для получения размера файла. Рассмотрим два наиболее популярных из них.
Использование встроенного модуля os
Один из способов — использовать функцию getsize() из встроенного модуля os . Эта функция принимает путь к файлу в качестве аргумента и возвращает его размер в байтах.
import os file_size = os.path.getsize('path_to_your_file') print('Размер файла:', file_size, 'байт')
В данном примере ‘path_to_your_file’ — это строка, содержащая путь к файлу, размер которого вы хотите определить.
Использование модуля os и функции stat
Ещё один способ получить размер файла в Python — использовать функцию stat() из модуля os . Эта функция возвращает объект os.stat_result , который содержит различные атрибуты файла, включая его размер.
import os file_info = os.stat('path_to_your_file') file_size = file_info.st_size print('Размер файла:', file_size, 'байт')
В данном примере атрибут st_size объекта os.stat_result содержит размер файла в байтах.
Оба этих способа предоставляют простые и эффективные средства для получения размера файла в Python. Выбор между ними зависит от конкретных потребностей и предпочтений разработчика.
How do I check file size in Python?
So is there a minute performance loss from using os.path.getsize as opposed to os.stat(file).st_size?
@wordsforthewise this is more of an issue if you also want to get other things about the file (modification time, type of file, e.g.) — then you might as well get it all from a single system call via os.stat . Then the difference could run into a substantial number of microseconds 🙂
You need the st_size property of the object returned by os.stat . You can get it by either using pathlib (Python 3.4+):
>>> from pathlib import Path >>> Path('somefile.txt').stat() os.stat_result(st_mode=33188, st_ino=6419862, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=1564, st_atime=1584299303, st_mtime=1584299400, st_ctime=1584299400) >>> Path('somefile.txt').stat().st_size 1564
>>> import os >>> os.stat('somefile.txt') os.stat_result(st_mode=33188, st_ino=6419862, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=1564, st_atime=1584299303, st_mtime=1584299400, st_ctime=1584299400) >>> os.stat('somefile.txt').st_size 1564
@josch — yes, this is nice, for the «size on disk» you can multiply stat_result.st_blocks by the block size, but I’m still searching how to get it programmatically and cross-platform (not via tune2fs etc.)
@TomaszGandor now st_blocks is defined as «Number of 512-byte blocks allocated for file», so you don’t have to get the block size.
The other answers work for real files, but if you need something that works for «file-like objects», try this:
# f is a file-like object. f.seek(0, os.SEEK_END) size = f.tell()
It works for real files and StringIO’s, in my limited testing. (Python 2.7.3.) The «file-like object» API isn’t really a rigorous interface, of course, but the API documentation suggests that file-like objects should support seek() and tell() .
Another difference between this and os.stat() is that you can stat() a file even if you don’t have permission to read it. Obviously the seek/tell approach won’t work unless you have read permission.
At Jonathon’s suggestion, here’s a paranoid version. (The version above leaves the file pointer at the end of the file, so if you were to try to read from the file, you’d get zero bytes back!)
# 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)
3 способа получить размер файла в Python
Python stat() — это встроенный модуль OS , который имеет два метода, которые возвращают размер файла. Модуль OS в Python предоставляет функции для взаимодействия с операционной системой. Он входит в стандартные служебные модули Python. Модуль os обеспечивает портативный подход к использованию функций, зависящих от операционной системы.
Получение размера файла в Python
Чтобы получить размер файла в Python, мы можем использовать один из следующих трех способов:
Python os.path.getsize()
Функция os.path.getsize() возвращает размер в байтах. Вызовет OSError, если файл не существует или недоступен.
Сначала мы определили файл, а затем получили его размер с помощью функции os.path.getsize(), которая возвращает размер файла в байтах, а затем в последней строке мы преобразовали размер в байтах в размер в МБ.
Python os.stat()
Метод os.stat() в Python выполняет системный вызов stat() по указанному пути. Метод stat() используется для получения статуса указанного пути. Затем мы можем получить его атрибут st_size, чтобы получить размер файла в байтах. Метод stat() принимает в качестве аргумента имя файла и возвращает кортеж, содержащий информацию о файле.
Из вывода вы можете видеть, что мы получили кортеж, полный информации о файле. Затем мы получили доступ к определенному свойству, называемому st_size, чтобы получить размер файла, а затем преобразовать размер в МБ или мегабайты.
Если вы внимательно посмотрите на метод stat(), мы можем передать еще два параметра: dir_fd и follow_symlinks. Однако они не реализованы для macOS.
Python path.stat().st_mode
Функция Python path.stat() возвращает объект os.stat_result, содержащий информацию об этом пути, подобно os.stat(). Результат просматривается при каждом вызове этого метода.