Estoy escribiendo un script de Python en Windows. Quiero hacer algo en función del 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?

Path('./doc.txt').stat().st_sizeRespuestas:
Necesita la
st_sizepropiedad del objeto devuelto poros.stat. Puede obtenerlo usandopathlib(Python 3.4+):o usando
os.stat:La salida está en bytes.
fuente
stat_result.st_blockspor el tamaño del bloque, pero todavía estoy buscando cómo obtenerlo mediante programación y multiplataforma (no a través detune2fsetc.)Utilizando
os.path.getsize:La salida está en bytes.
fuente
os.path.getsizees simplementereturn os.stat(filename).st_sizeos.stat. Entonces la diferencia podría encontrarse en un número considerable de microsegundos :-)Las otras respuestas funcionan para archivos reales, pero si necesita algo que funcione para "objetos similares a archivos", intente esto:
Funciona para archivos reales y StringIO, en mis pruebas limitadas. (Python 2.7.3.) La API "objeto tipo archivo" no es realmente una interfaz rigurosa, por supuesto, pero la documentación de la API sugiere que los objetos tipo archivo deberían admitir
seek()ytell().Editar
Otra diferencia entre esto y
os.stat()es que puedestat()crear un archivo incluso si no tiene 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 intenta leer el archivo, ¡obtendrá cero bytes!)
fuente
os, en su lugar escribaf.seek(0, 2)para buscar 0 bytes desde el final.osno se usa:f.seek(old_file_position, 0)os.sizesalida está en bytes?#seek(): wiki.sei.cmu.edu/confluence/display/c/…Resultado:
fuente
this function will convert bytes to MB.... GB... etcIncorrecto. Esta función convertirá bytes a MiB, GiB, etc. Ver esta publicación .return f'{num:.1f} {x}'en Python> = 3.5.Usando
pathlib( agregado en Python 3.4 o un puerto disponible en PyPI ):Esto es realmente solo una interfaz
os.stat, pero el usopathlibproporciona una manera fácil de acceder a otras operaciones relacionadas con archivos.fuente
Hay un
bitshifttruco que uso si quiero convertir debytescualquier otra unidad. Si hace un desplazamiento a la derecha,10básicamente lo cambia por un orden (múltiple).fuente
Estrictamente apegado a la pregunta, el código de Python (+ pseudocódigo) sería:
fuente
fuente
tenemos dos opciones Ambas incluyen la importación del módulo os
1) importar os como os.stat () la función devuelve un objeto que contiene muchos encabezados, incluido el tiempo de creación del archivo y el tiempo de la última modificación, etc. entre ellos st_size () proporciona el tamaño exacto del archivo.
os.stat ("nombre de archivo"). st_size ()
2) import os En esto, tenemos que proporcionar la ruta exacta del archivo (ruta absoluta), no una ruta relativa.
os.path.getsize ("ruta del archivo")
fuente