Вопрос-Ответ

How do I check file size in Python?

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

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

Переведено автоматически
Ответ 1

Использовать os.path.getsize:

>>> import os
>>> os.path.getsize("/path/to/file.mp3")
2071611

Выходные данные указаны в байтах.

Ответ 2

Вам нужно st_size свойство объекта, возвращаемого os.stat. Вы можете получить его с помощью любого из 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

или с помощью os.stat:

>>> 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

Выходные данные указаны в байтах.

Ответ 3

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

# 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


def convert_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


def file_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)

Результат:

6.1 MB
2023-08-04 12:47 python file