How do I get the size of a file in Python?
310 Answers
Use os.path.getsize:
>>> import os >>> os.path.getsize("/path/to/file.mp3") 2071611 The output is in bytes.
7You 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 or using 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 Output is in bytes.
2The 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().
Edit
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.
Edit 2
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) 5import 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) Result:
6.1 MB 3Using pathlib (added in Python 3.4 or a backport available on PyPI):
from pathlib import Path file = Path() / 'doc.txt' # or Path('./doc.txt') size = file.stat().st_size This is really only an interface around os.stat, but using pathlib provides an easy way to access other file related operations.
There is a bitshift trick I use if I want to to convert from bytes to any other unit. If you do a right shift by 10 you basically shift it by an order (multiple).
Example:
5GB are 5368709120 bytes
print (5368709120 >> 10) # 5242880 kilobytes (kB) print (5368709120 >> 20 ) # 5120 megabytes (MB) print (5368709120 >> 30 ) # 5 gigabytes (GB) 7Strictly sticking to the question, the Python code (+ pseudo-code) would be:
import os file_path = r"<path to your file>" if os.stat(file_path).st_size > 0: <send an email to somebody> else: <continue to other things> we have two options Both include importing os module
1)
import os os.stat("/path/to/file").st_size as os.stat() function returns an object which contains so many headers including file created time and last modified time etc.. among them st_size gives the exact size of the file. File path can be either absolute or relative.
2) In this, we have to provide the exact file path, File path can be either relative or absolute.
import os os.path.getsize("path of file") 1You can use the stat() method from the os module. You can provide it with a path in the form of a string, bytes or even a PathLike object. It works with file descriptors as well.
import os res = os.stat(filename) res.st_size # this variable contains the size of the file in bytes #Get file size , print it , process it... #Os.stat will provide the file size in (.st_size) property. #The file size will be shown in bytes. import os fsize=os.stat('filepath') print('size:' + fsize.st_size.__str__()) #check if the file size is less than 10 MB if fsize.st_size < 10000000: process it ....