lenguaje - python tutorial
¿Cómo comprobar el tamaño del archivo en python? (7)
Estoy escribiendo un script de Python en Windows. Quiero hacer algo basado en el tamaño del archivo. Por ejemplo, si el tamaño es mayor que 0, enviaré un correo electrónico a alguien, de lo contrario continuaré con otras cosas.
¿Cómo verifico el tamaño del archivo?
Cumpliendo estrictamente la pregunta, el código de python (+ pseudo-código) sería:
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>
Hay un truco bitshift
que utilizo si quiero convertir de bytes
a cualquier otra unidad. Si haces un cambio a la derecha por 10
, básicamente lo cambias por un orden (múltiple).
Ejemplo:
5GB are 5368709120 bytes
print (5368709120 >> 10) # 5242880 kilo Bytes (kB)
print (5368709120 >> 20 ) # 5120 Mega Bytes(MB)
print (5368709120 >> 30 ) # 5 Giga Bytes(GB)
Las otras respuestas funcionan para archivos reales, pero si necesita algo que funcione para "objetos tipo archivo", 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 del "objeto similar a un archivo" no es realmente una interfaz rigurosa, por supuesto, pero la documentación de la API sugiere que los objetos similares a un archivo deberían admitir a seek()
y tell()
.
Editar
Otra diferencia entre esto y os.stat()
es que puedes stat()
un archivo incluso si no tienes permiso para leerlo. Obviamente, el enfoque de buscar / contar no funcionará a menos que tenga permiso de lectura.
Editar 2
A 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 de vuelta).
# 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)
Usando pathlib
( agregado en Python 3.4 y disponible en PyPI ) ...
from pathlib import Path
file = Path() / ''doc.txt'' # or Path(''./doc.txt'')
size = file.stat().st_size
Esta es realmente solo una interfaz alrededor de os.stat
, pero el uso de pathlib
proporciona una manera fácil de acceder a otras operaciones relacionadas con archivos.
Utilizando os.path.getsize
:
>>> import os
>>> b = os.path.getsize("/path/isa_005.mp3")
>>> b
2071611L
La salida está en bytes.
Use os.stat
y use el miembro st_size
del objeto resultante:
>>> import os
>>> statinfo = os.stat(''somefile.txt'')
>>> statinfo
(33188, 422511L, 769L, 1, 1032, 100, 926L, 1105022698,1105022732, 1105022732)
>>> statinfo.st_size
926L
La salida está en bytes.
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