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_size
Respuestas:
Necesita la
st_size
propiedad del objeto devuelto poros.stat
. Puede obtenerlo usandopathlib
(Python 3.4+):o usando
os.stat
:La salida está en bytes.
fuente
stat_result.st_blocks
por el tamaño del bloque, pero todavía estoy buscando cómo obtenerlo mediante programación y multiplataforma (no a través detune2fs
etc.)Utilizando
os.path.getsize
:La salida está en bytes.
fuente
os.path.getsize
es simplementereturn os.stat(filename).st_size
os.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.os
no se usa:f.seek(old_file_position, 0)
os
.size
salida está en bytes?#seek()
: wiki.sei.cmu.edu/confluence/display/c/…Resultado:
fuente
this function will convert bytes to MB.... GB... etc
Incorrecto. 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 usopathlib
proporciona una manera fácil de acceder a otras operaciones relacionadas con archivos.fuente
Hay un
bitshift
truco que uso si quiero convertir debytes
cualquier otra unidad. Si hace un desplazamiento a la derecha,10
bá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