¿Cómo verificar el tamaño de archivo y carpeta en Python?

En este artículo, aprenderá a comprobar el tamaño de un archivo o carpeta en Python

Python es uno de los lenguajes de programación más versátiles. Con él, podrá construir desde un pequeño programa CLI (interfaz de línea de comandos) a un aplicación web compleja.

Sin embargo, una de sus características más subestimadas es la capacidad de interactuar con los sistemas operativos. La gestión de las operaciones del sistema operativo con Python puede ahorrarle mucho tiempo al crear procesos de automatización.

Veamos cómo Python interactúa con el sistema operativo.

¿Cómo interactúa Python con el sistema operativo?

Python interactúa con el SO con los módulos os, sys, path y subprocess

Nadie puede vivir aislado de su entorno. Eso también se aplica en Python, donde a veces es fundamental interactuar con el sistema operativo para hacer las cosas.

Python tiene varios módulos que nos permiten interactuar con el sistema operativo. Los más utilizados son os, sys, pathlib y subproceso.

Dado que son módulos integrados, no necesitará instalarlos con PIP. Puede importarlos todos con la siguiente declaración:

import os import sys import pathlib import subprocess

La siguiente lista indica la funcionalidad principal de cada una de estas importaciones:

Existen bibliotecas de alto nivel que incluyen funciones aún más específicas según sus necesidades. Sin embargo, la mayoría de las veces está listo para usar los módulos anteriores.

Nota: La mayoría de las funciones proporcionadas por estos módulos tendrán una salida diferente según su sistema operativo. Recuerde que, por lo general, la mejor combinación es UNIX y Python.

Ahora que tiene una idea rápida de cómo Python interactúa con el sistema operativo, veamos los métodos para verificar el tamaño de archivos y carpetas. Todas las siguientes soluciones están disponibles en el Tamaño de archivo y carpeta en Python Repositorio GitHub

Using os.stat().st_size

En este método, usaremos el stat () función desde el módulo del sistema operativo. Devuelve mucha información sobre una ruta específica.

Nota: La herramienta en línea os.path.getsize () La función también hace el trabajo. La ventaja de usar os.stat ().st_size es que no sigue simlinks.

Antes de continuar, creemos un archivo de prueba llamado lorem.txt, en el que vamos a pegar algunos texto tonto. Podemos visitar un Generador de texto Lorem Ipsum y pegue el texto en el lorem.txt archivo.

En el mismo directorio, cree un archivo con el nombre método1.py y pega el código a continuación:

import os size = os.stat('lorem.txt').st_size print(size)

Analicemos lo que estamos haciendo con este código:

Trate de ejecutar la secuencia de comandos de Python. Obtendrá un resultado diferente según el contenido de su lorem.txt archivo.

Salida:

20064

La salida se representa en bytes. Esto no se puede leer en absoluto, así que humanicémoslo para que podamos tener una mejor perspectiva del tamaño del archivo.

Primero, instale el humanizar paquete, ejecutando el siguiente comando en su shell:

pip install humanize

Entonces puedes usar el tamaño natural () función que convierte un valor en bytes en un tamaño de archivo legible, por ejemplo, KB, MB, GB o TB.

import os from humanize import naturalsize  size = os.stat('lorem.txt').st_size  print(size) print(naturalsize(size))

Al principio, el código anterior imprime el tamaño del archivo en bytes y luego imprime el resultado en un tamaño legible.

Salida:

20064 20.1 kB

Using Pathlib

Aunque Pathlib Está diseñado para trabajar exclusivamente con rutas, incorpora algunas funciones útiles de otros módulos como métodos de objetos Path (Instancias de la clase Path).

Crear un archivo método2.py e importar el Clase de ruta.

from pathlib import Path

Luego crea un objeto Path pasando la ruta al lorem.txt archivo como argumento.

file_ = Path('lorem.txt')

Ahora, puede acceder al stat () método de la clase Path. Funciona igual que el os.stat () función, por lo tanto, podrá imprimir el tamaño del archivo.

print(file_.stat().st_size)

Salida:

20064

Como puede ver, obtuvimos el mismo resultado que con el primer método que usamos. El resultado anterior también se imprime en formato de bytes, por lo que podemos usar el módulo humanizar para hacerlo legible.

from pathlib import Path from humanize import naturalsize  size = Path('lorem.txt').stat().st_size  print(naturalsize(size))

Este código produce la siguiente salida:

20.1 kB

Using Unix commands with Subprocess:

El módulo de subproceso, nos permite llamar y administrar subprocesos desde Python. Por lo tanto, podemos ejecutar cualquier comando y tratar su salida directamente en Python.

Nota: Este método solo funciona si está ejecutando un sistema operativo Unix (Linux, Mac)

Abrir el archivo método3.py y pega el código a continuación:

from subprocess import run  process = run(['du', 'lorem.txt'], capture_output=True, text=True)  print(process.stdout)

Buceando en este fragmento de código:

Si ejecuta el código anterior, obtendrá el siguiente resultado:

20      lorem.txt

Como puede ver, nos da el tamaño y el nombre del archivo. Si solo desea obtener el tamaño del archivo, deberá dividir la salida (recuerde que es una cadena) e imprimir el primer elemento.

from subprocess import run  process = run(['du', 'lorem.txt'], capture_output=True, text=True)  size = process.stdout.split()[0]  print(size)

Salida:

20

Esta salida no es legible en absoluto. Podemos inferir que la unidad de medida utilizada es KB (debido a los métodos anteriores), pero nadie más pudo adivinar el tamaño del archivo.

Para resolver este problema, podemos hacer uso de la -h (legible por humanos).

Nota: Puede obtener un manual de este comando ejecutando hombre du o el du-ayuda.

from subprocess import run  process = run(['du', '-h', 'lorem.txt'], capture_output=True, text=True)  size = process.stdout.split()[0]  print(size)

Ahora la salida de este script será mucho más legible:

20K

Si desea saber más sobre el módulo de subprocesos y sus posibles aplicaciones, consulte nuestro Guía de subprocesos de Python.

Get the Size of a Folder Recursively

Si desea obtener el tamaño de una carpeta, deberá iterar sobre cada archivo presente en el directorio y sus subdirectorios. Lo haremos con dos métodos:

El siguiente código utilizará una ruta a un directorio de prueba dentro de mi carpeta de inicio. Deberá reemplazar la ruta de ese archivo por el directorio del que desea obtener el tamaño.

Iterando sobre una ruta con pathlib

Veamos cómo puede obtener el tamaño de un directorio iterando sobre los tamaños de los archivos.

from pathlib import Path from humanize import naturalsize  def get_size(path = '.'):     size = 0      for file_ in Path(path).rglob('*'):          size += file_.stat().st_size          return naturalsize(size)  test_path = Path.home() / 'Documents/tests/'  print(get_size(test_path))

Este fragmento de código parece un poco aterrador, analicemos lo que hace cada parte.

Por supuesto, estoy probando la función con un directorio disponible solo en mi máquina. No olvide cambiar la ruta a una carpeta que exista en su computadora.

En mi caso, obtengo el siguiente resultado:

403.4 MB

Usando el comando du con subproceso

Este enfoque tiene algunas ventajas:

from subprocess import run from pathlib import Path  test_path = Path.home() / 'Documents/tests/'  process = run(['du', '-sh', test_path], capture_output=True, text=True)  size = process.stdout.split()[0]  print(size)

Estamos usando el mismo enfoque que el método 3, pero esta vez obtenemos el tamaño de un directorio en lugar de un archivo.

Salida:

481M

Como puede ver, estas dos formas de obtener el tamaño de una carpeta, devuelve un resultado ligeramente diferente. Cuanto más grande sea el directorio, mayor será la diferencia que obtendrá.

Depende de usted elegir entre Pathlib o subproceso enfoques. Si sabe que utilizará Linux cada vez que utilice subproceso, de lo contrario, puede usar la solución pathlib.

Para resumir

Python resulta extremadamente útil al interactuar con el sistema operativo. Puede automatizar procesos y ahorrar mucho tiempo con Python. Los principales módulos para interactuar con el sistema operativo son os, sys, path y subprocess.

En este tutorial aprendiste: