domingo, 28 de septiembre de 2014

Tutorial de Python parte 21 - Módulos glob y os obtener información de directorios




En esta ocasión continuaremos viendo un módulo nativo de Python llamado glob que nos va a resultar muy útil para examinar el contenido que se encuentra en un determinado directorio, permitiéndonos extraer tanto archivos como carpetas e incluyendo filtros para extraer sólo el contenido deseado.

El módulo glob sólo provée un método llamado glob(path) que nos regresa una lista con el filtro indicado en el path.

En el ejemplo nos apoyaremos a través del módulo os, este módulo es otro de esos módulos fundamentales del sistema y proporciona una gran variedad de herramientas como métodos y submódulos para manipular y obtener información en lo relativo a los directorios y archivos, desde crear un directorio, eliminarlo o saber si un directorio o un archivo existe, entre otras tantas posibilidades. Para el ejemplo de hoy utilizaremos os.path y los métodos isfile(path) y isdir(path)

os.path.isfile(path) : regresa un valor boolean. regresa true si el argumento dado es un archivo y existe
os.path.isdir(path) : regresa un valor boolean. regresa true si el argumento dado es un directorio y existe

En el capítulo del vídeo tutorial creamos un directorio que será el que examinaremos, en el interior de este directorio se encuentran archivos y carpetas que a través de glob y os.path iremos buscando información, esta información será almacenada en listas.

directorio.py
directorio
              carpeta1
              carpeta2
              document1.txt
              document2.txt
              doc.txt

El código del capítulo del vídeo tutorial lo pueden ver a continuación ...


import glob, os.path

#¡IMPORTANTE! codificar el script en UTF-8 ya que se encuentran vocales acentuadas

#glob permite indexar en la ruta seleccionada para examinar los archivos y documentos que contiene 

#os.path es un submódulo de os, que nos permitirá entre otras cosas saber si un archivo o carpeta existe en la ruta indicada

#Crea una lista con todos los archivos y carpetas de la ruta indicada
todos = glob.glob("directorio/*")
print("Todos los archivos y carpetas:", todos)

#Crear una lista solo con los archivos del directorio
archivos = []
for element in todos:
 if (os.path.isfile(element)):
  archivos.append(element)
print("Sólo los archivos:", archivos)

#Crear una lista solo con las carpetas del directorio
carpetas = []
for element in todos:
 if (os.path.isdir(element)):
  carpetas.append(element)
print("Sólo las carpetas:", carpetas)
  

#Crea una lista con todos los archivo .txt de la ruta indicada
txt = glob.glob("directorio/*.txt")
print("Todos los archivos con extensión .txt:", txt)

#crea una lista con todos los archivos .txt cuyo nombre este formado por 3 caracteres
txt3char = glob.glob("directorio/???.txt")
print("Todos los archivos .txt cuyo nombre está formado por 3 caracteres:", txt3char)