
Operaciones con directorios
Una de las utilidades del módulo os es el trabajo con directorios, así que dedicaré esta entrada a las funciones que nos permiten operar con directorios.
Lo primero que vamos a hacer (1) es conocer en qué directorio estamos trabajando, esto es: en qué directorio se encuentra el archivo .py desde el que solicitamos la información. Se trata, pues, de identificar el directorio en el que se encuentran los archivos que necesitamos en nuestro proyecto, uno de los cuales será, obviamente, el propio archivo .py. Para ello empleamos la función os.getcwd() que nos devuelve la ruta completa del directorio en que nos encontramos (2):
# Obtener el directorio de trabajo actual
directorio_actual = os.getcwd()
print(f"Estás en: {directorio_actual}")
Una vez que sabemos en qué directorio estamos situados, puede interesarnos acceder a otro diferente (3). Para ellos disponemos de la función os.chdir() a la que pasamos como parámetro el string del directorio al que deseamos acceder para, por ejemplo, crear en él un nuevo directorio, para lo que empleamos la función os.mkdir(). Esto es lo que hace el siguiente script.
import os
# Obtenemos el directorio de trabajo inicial
directorio_inicial = os.getcwd()
print(f"Estás en: {directorio_inicial}")
# Cambiamos el directorio de trabajo y obtenemos su ruta
os.chdir('D:/ArchivosVarios')
directorio_actual = os.getcwd()
print(f"Y ahora estás en: {directorio_actual}")
# Y finalmente creamos un nuevo directorio en él.
os.mkdir('nuevo_directorio')
También podemos eliminar un directorio preexistente, tanto si está vacío (os.rmdir())...
os.rmdir('nuevo_directorio') # Módulo os. Elimina un directorio vacío
... como si no lo está, aunque para esto deberemos importar el módulo shutil, que debe ser usado con precaución (4).
import shutil # Módulo complementario para operaciones de archivos
shutil.rmtree('directorio_con_contenido') # ¡Cuidado! Elimina todo el contenido
Una vez que accedemos a un directorio nos puede interesar conocer qué subdirectorios y archivos contiene (listdir()), sólo qué archivos (isfile()) o sólo qué directorios (isdir())...
#Ahora listamos los subdirectorios y archivos del directorio actual
lista_conten= os.listdir('.') # '.' representa el directorio actual
print(f"Contenido del directorio: {lista_conten}")
#Sólo mostramos los archivos
archivos = [f for f in lista_conten if os.path.isfile(f)]
print(f"Archivos: {archivos}")
#Sólo mostramos los subdirectorios
directorios = [d for d in lista_conten if os.path.isdir(d)]
print(f"Directorios: {directorios}")
... aunque es posible que deseemos hacer un listado con información más detallada
for elemento in lista_conten:
tipo = "Directorio" if os.path.isdir(elemento) else "Archivo"
tamaño = os.path.getsize(elemento) # Tamaño en bytes
print(f"{elemento} - {tipo} - {tamaño} bytes")
NOTAS
(1) Realmente lo primero que haremos será importar el módulo os mediante la instrucción correspondiente (import os), pero esto lo damos por sabido.
(2) La segunda instrucción es la que nos devuelve por pantalla esa ruta. En otras ocasiones puede interesarnos conocerla para trabajar con ella, de ahí el interés por asociarla a una variable.
(3) La función getcwd() es interesante para conocer desde donde se ejecuta nuestro script, pero necesitamos la función chdir() para navegar por el sistema de archivos.
(4) El módulo shutil permite realizar operaciones de alto nivel con archivos y colecciones de archivos, incluyendo la copia y el borrado de archivos y directorios. Su uso debe ser cuidadoso, ya que podemos eliminar accidentalmente archivos que no deseamos borrar.