¿Cómo verifico el tamaño del archivo en Python?
¿Cómo obtengo el tamaño de un archivo en Python?
Usar os.path.getsize
:
>>> import os
>>> os.path.getsize("/path/to/file.mp3")
2071611
La salida está en bytes.
Necesita la st_size
propiedad del objeto devuelto poros.stat
. Puede obtenerlo usando 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
o usando 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
La salida está en bytes.
Las otras respuestas funcionan para archivos reales, pero si necesita algo que funcione para "objetos similares a archivos", intente esto:
# f is a file-like object.
f.seek(0, os.SEEK_END)
size = f.tell()
Funciona para archivos reales y StringIO, en mis pruebas limitadas. (Python 2.7.3.) La API de "objetos similares a archivos" no es realmente una interfaz rigurosa, por supuesto, pero la documentación de la API sugiere que los objetos similares a archivos deberían admitir seek()
y tell()
.
Editar
Otra diferencia entre esto y os.stat()
es que puedes guardar stat()
un archivo incluso si no tienes permiso para leerlo. Obviamente, el enfoque de buscar/decir no funcionará a menos que tenga permiso de lectura.
Editar 2
Por sugerencia de Jonathon, aquí hay una versión paranoica. (La versión anterior deja el puntero del archivo al final del archivo, por lo que si intentas leer el archivo, ¡obtendrás cero bytes!)
# 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)
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)
Resultado:
6.1 MB