Como Crear directorios en python?

El manejo de directorios en python es bastante simple, el objetivo es hacer mas con menos código, así que comenzamos con una versión primitiva de como crear un directorio, usando siempre el paquete “os” que maneja este y muchos otros asuntos:

import os

dir crear_directorio(ruta):
  try:
    os.makedirs(ruta)
  except OSError:
    pass
  # si no podemos crear la ruta dejamos que pase
  # si la operación resulto con éxito nos cambiamos al directorio 
  os.chdir(ruta)

Si lo queremos ne menos lineas:

nuevaruta = r'ruta/al/directorio/directorio' 
if not os.path.exists(nuevaruta): os.makedirs(nuevaruta)

Este ultimo se asegura que la ruta no exista, y si no existe pues la crea. Ahora veamos uno mas compacto aun usando un shell del sistema operativo:

import os
os.system("mkdir /ruta/al/directorio")

si dentro de la ruta existe una “carpeta” que no existe esta sera creada! sip así de fácil y divertido.

Como renombrar (mover) un archivo en python

Renombrar un archivo en python puede resultar de usar la misma funcionalidad que se usa para mover un archivo, el truco consiste en “mover” un archivo en el directorio x al mismo directorio x pero con diferente nombre. Todo lo que toma es importar el modulo “shutil” y usar su función “move” que mueve directorios de un lado a otro.

import shutil

def move(src, dest):
    shutil.move(src, dest)

Pero… entonces para que sirve el “os.rename”? Bueno aunque su nombre es mas descriptivo, resulta que el “shutil.move” utiliza el “os.rename” si el directorio fuente es igual al directorio de destino, y utiliza el “shutil.copy2” para copiar los archivos si el directorio es distinto, entonces en “shutil.move” tenemos una forma compacta de ocuparnos de ambos casos.

Como recorrer un directorio en python

Recorrido básico:

import os

# Setteamos el directorio raiz a la variable rootDir
# En realidad la variable se puede llamar como sea :)

rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir):
    print('Directorio encontrado: %s' % dirName)
    for fname in fileList:
        print('\t%s' % fname)

la función “os.walk” se encarga de la recursividad y en cada iteración nos devuelve los siguientes valores:

  • dirName: El siguiente directorio que encontro
  • subDirList: Una lista de todos los sub-directorios en el directorio actual.
  • fileList: Una lista de archivos en el directorio actual

Otra forma de recorrer los directorios

import os

rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir, topdown=False):
    print('Found directory: %s' % dirName)
    for fname in fileList:
        print('\t%s' % fname)

la diferencia de este snippet de código es que le pasamos el parámetro topdown el cual nos permite recorrer el árbol desde sus “hojas” en lugar de recorrerlo desde la raíz, asi pues, el output es los archivos primero y luego los directorios. Mas eficaz si lo que buscamos puede estar en el ultimo folder del directorio.

Revisar si un directorio o archivo existe en python

Existen varias formas de hacer esta operación, veamos algunas:

  1. os.path.isfile(ruta)
    • os.path.isfile("foo.txt")
  2. os.access(path, mode)
    • os.access("foo.txt", os.R_OK) # revisa si existe y se puede leer
      os.access("foo.txt", os.W_OK) # revisa si existe y se puede escribir
  3. open dentro de un try catch
    • try:
         f = open("foo.txt")
      except IOError as e:
         print("Uh oh! Esto no existe")

En el caso 1 y 2 ambos regresan un valor booleano según el archivo sea accesible o no, en la mayoría de los casos el ejemplo 1 debería bastar.

 

Categorized in: