Python: obtenga una lista de archivos en el directorio con tamaño

En este artículo vamos a ver cómo extraer la lista de archivos del directorio junto con su tamaño. Para ello, utilizaremos el módulo OS.

El módulo OS en Python proporciona funciones para interactuar con el sistema operativo. OS viene bajo los módulos de utilidad estándar de Python. Este módulo proporciona una forma portátil de usar la funcionalidad dependiente del sistema operativo. El módulo os.path es un submódulo del módulo OS en Python utilizado para la manipulación de nombres de rutas comunes.

Funciones utilizadas

Sintaxis: os.path.isfile(ruta)

Parámetro:  

  • ruta:  objeto similar a una ruta que representa una ruta del sistema de archivos. Un objeto similar a una ruta es una string o un objeto de bytes que representa una ruta.

Tipo de devolución: este método devuelve un valor booleano de clase bool. Este método devuelve True si la ruta especificada es un archivo regular existente; de ​​lo contrario, devuelve False. 

  • El método os.path.join() en Python une uno o más componentes de ruta de manera inteligente. Este método concatena varios componentes de ruta con exactamente un separador de directorio (‘/’) después de cada parte no vacía excepto el último componente de ruta. Si el último componente de ruta que se va a unir está vacío, se coloca un separador de directorio (‘/’) al final. Si un componente de ruta representa una ruta absoluta, todos los componentes anteriores unidos se descartan y la unión continúa desde el componente de ruta absoluta.

Sintaxis: os.path.join(ruta, *ruta)  

Parámetro:  

  • ruta:  un objeto similar a una ruta que representa una ruta del sistema de archivos.  
  • *ruta: un objeto similar a una ruta que representa una ruta del sistema de archivos. Representa los componentes del trayecto que se van a unir.
  • Un objeto similar a una ruta es una string o un objeto de bytes que representa una ruta.
  • Nota: La sintaxis especial *args (aquí *paths) en las definiciones de funciones en python se usa para pasar un número variable de argumentos a
  • Una función.

Tipo de devolución: este método devuelve una string que representa los componentes de ruta concatenados.  

  • os.listdir(): este método en python se usa para obtener la lista de todos los archivos y directorios en el directorio especificado. Si no especificamos ningún directorio, se devolverá una lista de archivos y directorios en el directorio de trabajo actual.

Sintaxis: os.listdir(ruta)

Parámetros:  

  • ruta (opcional): ruta del directorio

Tipo de devolución: este método devuelve la lista de todos los archivos y directorios en la ruta especificada. El tipo de retorno de este método es lista.

  • filter(): este método filtra la secuencia dada con la ayuda de una función que comprueba si cada elemento de la secuencia es verdadero o no.

Sintaxis: filter(función, secuencia)

Parámetros:

  • función: función que prueba si cada elemento de una secuencia es verdadero o no.
  • secuencia: secuencia que necesita ser filtrada, pueden ser conjuntos, listas, tuplas o contenedores de cualquier iterador.

Devoluciones: devuelve un iterador que ya está filtrado.

  • os.stat() : este método en Python realiza una llamada al sistema stat() en la ruta especificada. Este método se utiliza para obtener el estado de la ruta especificada.

Sintaxis: os.stat(ruta)

Parámetro:

ruta: una string o un objeto de bytes que representa una ruta válida

Devuelve: st_size: Representa el tamaño del archivo en bytes.

  • os.walk() : Esto genera los nombres de los archivos en un árbol de directorios recorriendo el árbol de arriba hacia abajo o de abajo hacia arriba. Para cada directorio en el árbol arraigado en la parte superior del directorio (incluida la parte superior misma), produce una tupla de 3 (ruta de directorio, nombres de directorio, nombres de archivo).

Lista de archivos en un directorio con tamaño

En esta parte del código, solo obtendremos la lista de nombres y tamaños de archivos. En este código, tenemos la función os.stat() para obtener el tamaño de cada archivo, y el tamaño resultará en ‘byte’, por lo que tenemos que dividir el tamaño del archivo de 1024*1024 para obtener el tamaño en el ‘ megabytes’ para una mejor comprensión. 

Directorio utilizado

Python3

# import python modules
import os
 
# directory name from which
# we are going to extract our files with its size
path = "D:\Books"
 
# Get list of all files only in the given directory
fun = lambda x : os.path.isfile(os.path.join(path,x))
files_list = filter(fun, os.listdir(path))
 
# Create a list of files in directory along with the size
size_of_file = [
    (f,os.stat(os.path.join(path, f)).st_size)
    for f in files_list
]
# Iterate over list of files along with size
# and print them one by one.
for f,s in size_of_file:
    print("{} : {}mb".format(f, round(s/(1024*1024),3)))

Producción:

2015_Book_LinearAlgebraDoneRight.pdf : 2.199mb
An Introduction to Statistical Learning - Gareth James.pdf : 8.996mb
Hand-on-ML.pdf : 7.201mb
ISLR Seventh Printing.pdf : 11.375mb
The Business of the 21st Century - Robert Kiyosaki.pdf : 8.932mb
The Elements of Statistical Learning - Trevor Hastie.pdf : 12.687mb
the_compound_effect_ebook.pdf : 5.142mb

Lista de rutas de archivos en el directorio ordenados por tamaño

En el código anterior, solo hemos generado los nombres de los archivos y sus tamaños correspondientes, pero en este caso, hemos impreso las rutas de los archivos en lugar de cada nombre de archivo y lo hemos ordenado según el tamaño de cada nombre de archivo en orden ascendente. En esto, tenemos que usar la función sorted, para ordenar nuestro archivo, según su tamaño.

Sintaxis: sorted(iterable, key=key, reverse=reverse)

Parámetros:

  • iterable: la secuencia para ordenar, listar, diccionario, tupla, etc.
  • tecla : Una función a ejecutar para decidir el orden. El valor predeterminado es Ninguno

inversa: un valor booleano. False ordenará ascendentemente, True ordenará descendentemente. El valor predeterminado es falso

Directorio utilizado

Python3

# import python modules
import os
 
# directory name from which we are
# going to extract our files with its size
path = "D:\ABC"
 
# Get list of all files only in the given directory
fun = lambda x : os.path.isfile(os.path.join(path,x))
 
files_list = filter(fun, os.listdir(path))
 
# Create a list of files in directory along with the size
size_of_file = [
    (f,os.stat(os.path.join(path, f)).st_size)
    for f in files_list
]
# Iterate over list of files along with size
# and print them one by one.
# now we have print the result by
# sorting the size of the file
# so, we have call sorted function
# to sort according to the size of the file
 
# created a lambda function that help us
# to sort according the size of the file.
fun = lambda x : x[1]
 
 
# in this case we have its file path instead of file
for f,s in sorted(size_of_file,key = fun):
    print("{} : {}mb".format(os.path.join(path,f),round(s/(1024*1024),3)))

Producción: 

D:\ABC\1.png : 0.022mb
D:\ABC\17.png : 0.024mb
D:\ABC\16.png : 0.036mb
D:\ABC\15.png : 0.047mb
D:\ABC\7.png : 0.074mb
D:\ABC\10.png : 0.076mb
D:\ABC\6.png : 0.09mb
D:\ABC\13.png : 0.093mb
D:\ABC\14.png : 0.097mb
D:\ABC\8.png : 0.104mb
D:\ABC\2.png : 0.115mb
D:\ABC\5.png : 0.126mb
D:\ABC\11.mp4 : 5.966mb

Lista de nombres de archivos en un directorio ordenados por tamaño:

Este código no es muy diferente del código anterior, hay un cambio muy pequeño en este código, en este código, simplemente imprimimos la salida como nombre de archivo en lugar de rutas de archivo, y el resto del código es el mismo.

Directorio utilizado

Python3

# import python modules
import os
 
# directory name from which we are
# going to extract our files with its size
path = "D:\ABC"
 
# Get list of all files only in the given directory
fun = lambda x : os.path.isfile(os.path.join(path,x))
 
files_list = filter(fun, os.listdir(path))
 
# Create a list of files
# in directory along with the size
size_of_file = [
    (f,os.stat(os.path.join(path, f)).st_size)
    for f in files_list
]
# Iterate over list of files along with size
# and print them one by one.
# now we have print the result by
# sorting the size of the file
# so, we have call sorted function
# to sort according to the size of the file
 
# created a lambda function that help
# us to sort according the size of the file.
fun = lambda x : x[1]
 
# in this case we have use its file name.
for f,s in sorted(size_of_file,key = fun):
    print("{} : {}mb".format(f,round(s/(1024*1024),3)))

Producción: 

1.png : 0.022mb
17.png : 0.024mb
16.png : 0.036mb
15.png : 0.047mb
7.png : 0.074mb
10.png : 0.076mb
6.png : 0.09mb
13.png : 0.093mb
14.png : 0.097mb
8.png : 0.104mb
2.png : 0.115mb
5.png : 0.126mb
11.mp4 : 5.966mb

Lista de rutas de archivos en directorio y subdirectorios ordenados por tamaño:

Este código es diferente de los 3 códigos anteriores, en este código, tenemos que mostrar todos los subdirectorios y tamaños de archivo con su nombre o ruta de archivo. Entonces, primero, tenemos que obtener todos nuestros subdirectorios y archivos presentes en el directorio usando la función os.walk() , lo que da como resultado un objeto generador que contiene 3 cosas, es decir, ruta, nombres de subdirectorios y nombres de archivos presentes en el directorio dado. Luego creamos una lista de archivos con su tamaño y, a continuación, tenemos que obtener el tamaño del subdirectorio presente en el directorio. Por fin, hemos generado nuestro código con el tamaño ordenado de los nombres de los archivos y sus subdirectorios.

Sintaxis: os.walk(ruta)

Parámetros:

ruta: La ruta del directorio desde donde podemos crear nuestro árbol de directorios.

Devoluciones : 

  • root : Imprime directorios solo de lo que especificó.
  • dirs: Imprime subdirectorios desde la raíz.
  • archivos : Imprime todos los archivos desde la raíz y los directorios.

Directorio utilizado

Python3

# import python modules
import os
 
# directory name from which we are
# going to extract our files with its size
path = "D:\ABC"
 
# get the path p, sub_directory sub_dir,
# and filename files from the given path
walk_method = os.walk(path)
 
# using exception handling to remove
# the stop iteration from generator object
# which we get the output from os.walk()  method.
while True:
    try:
        p, sub_dir, files = next(walk_method)
        break
    except:
        break 
         
# Create a list of files in directory along with the size
size_of_file = [
    (f,os.stat(os.path.join(path, f)).st_size)
    for f in files
]
  
# get the size of the sub_dir of the given path
for sub in sub_dir:
    i = os.path.join(path,sub)
    size = 0
    for k in os.listdir(i):
        size += os.stat(os.path.join(i,k)).st_size
    size_of_file.append((sub,size))
     
# Iterate over list of files along with size
# and print them one by one.
# now we have print the result by
# sorting the size of the file
# so, we have call sorted function
# to sort according to the size of the file
 
# in this case we have use its file paths.
for f,s in sorted(size_of_file,key = lambda x : x[1]):
    print("{} : {}mb".format(os.path.join(path,f),round(s/(1024*1024),3)))

Producción:

D:\ABC\1.png : 0.022mb
D:\ABC\17.png : 0.024mb
D:\ABC\16.png : 0.036mb
D:\ABC\15.png : 0.047mb
D:\ABC\7.png : 0.074mb
D:\ABC\10.png : 0.076mb
D:\ABC\6.png : 0.09mb
D:\ABC\13.png : 0.093mb
D:\ABC\14.png : 0.097mb
D:\ABC\8.png : 0.104mb
D:\ABC\2.png : 0.115mb
D:\ABC\5.png : 0.126mb
D:\ABC\11.mp4 : 5.966mb
D:\ABC\Books : 56.532mb

Publicación traducida automáticamente

Artículo escrito por dev247kumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *