Crear y eliminar directorios con Python

    Este artículo continúa con nuestra serie sobre la interacción con el sistema de archivos en Python. Los artículos anteriores tratan sobre la lectura y escritura de archivos. Curiosamente, el sistema de archivos es mucho más que una forma de almacenar / recuperar datos en el disco. También hay varios otros tipos de entradas como archivos, directorios, sockets (para comunicación entre procesos), canalizaciones con nombre, enlaces tanto blandos como duros, así como archivos especiales (dispositivos de bloque). Leer y escribir desde y hacia ellos se realiza de forma similar a como vimos en los artículos anteriores.

    Este artículo se centra en el manejo de directorios. Otros sistemas operativos, como UNIX / Linux, en su lugar utilizan una terminología diferente, donde una «entrada» se denomina «carpeta». A continuación, le mostraremos cómo identificar el directorio de trabajo actual, cómo crear un directorio único persistente y temporal, así como estructuras de directorio anidadas con subcarpetas, y cómo eliminar un directorio si ya no es necesario. Por lo tanto, los dos módulos de Python os y tempfile ven a jugar.

    Módulos de Python requeridos

    Leer y escribir archivos no requiere cargar un módulo adicional, pero acceder a las funciones del sistema de archivos (como manejar directorios) requiere que usemos un módulo separado. Primero el os debe cargarse el módulo. os es un módulo de Python que pertenece a la parte central del ecosistema de Python. Se hace usando una declaración de importación de la siguiente manera:

    import os
    

    los os El módulo contiene la mayoría de los métodos que necesitaremos a lo largo de este artículo. Sin embargo, como verá más adelante, si desea algo más avanzado, como crear un archivo temporal para almacenar datos, también necesitaremos el tempfile módulo.

    Detectar el directorio de trabajo actual

    Antes de comenzar a crear / eliminar directorios, veamos cómo realizar algunas otras operaciones básicas de directorio, como detectar el directorio de trabajo actual usando el método getcwd(). Este método devolverá una cadena que contiene la ruta de su directorio de trabajo. El Listado 1 muestra cómo integrar este método en una secuencia de comandos de Python.

    # import the os module
    import os
    
    # detect the current working directory and print it
    path = os.getcwd()
    print ("The current working directory is %s" % path)
    

    Listado 1

    La salida debería verse así:

    $ python3 cwd.py
    The current working directory is /home/frank/
    

    Además, el os módulo contiene el adicional getcwdb() método. Este es similar al getcwd() pero devuelve la ruta como una cadena binaria.

    Hay bastantes otras operaciones de directorio que no se tratan en este artículo, como comprobar si existe un archivo o directorio. Pero por ahora pasaremos al objetivo principal de este artículo.

    Crear un directorio

    La creación de un único directorio se realiza mediante el mkdir() método. Como parámetro, mkdir() primero requiere el nombre de la ruta del directorio para poder crearlo. Para ver un ejemplo, vea el código a continuación:

    import os
    
    # define the name of the directory to be created
    path = "/tmp/year"
    
    try:
        os.mkdir(path)
    except OSError:
        print ("Creation of the directory %s failed" % path)
    else:
        print ("Successfully created the directory %s " % path)
    

    Listado 2

    Tenga en cuenta que el mkdir() El método no puede crear subdirectorios en un nivel más profundo que uno en una sola llamada. Para crear una ruta completa tienes que llamar mkdir() una vez por nivel de directorio. Alternativamente, si desea crear varios directorios a la vez, utilice el makedirs() en su lugar (que puede ver en el Listado 4 a continuación).

    Como parámetro opcional puede especificar el derechos de acceso al directorio dentro de su mkdir() llamada. La configuración predeterminada es 777, lo que significa que el propietario, los miembros del grupo y todos los demás usuarios pueden leerlo y escribirlo. En caso de que necesite una configuración más restrictiva, como 755, (legible y accesible para todos los usuarios, y acceso de escritura solo para el propietario), puede llamarlo de la siguiente manera:

    import os
    
    # define the name of the directory to be created
    path = "/tmp/year"
    
    # define the access rights
    access_rights = 0o755
    
    try:
        os.mkdir(path, access_rights)
    except OSError:
        print ("Creation of the directory %s failed" % path)
    else:
        print ("Successfully created the directory %s" % path)
    

    Listado 3

    Una cosa a tener en cuenta sobre este código: es posible que haya notado que los derechos de acceso (755 aquí) se especifican mediante el prefijo octal (0o), lo cual está hecho para que no necesite convertir el número a decimal primero. Dado que el sistema operativo representa los permisos de acceso como octal, así es como los representaremos aquí también.

    Sin embargo, como el Documentación de Python estados, algunos sistemas ignoran el mode parámetro y debes usar os.chmod en lugar.

    Crear un directorio con subdirectorios

    Como ya se mencionó anteriormente, el mkdir() El método nos permite crear un único directorio, solo. Para crear subdirectorios de varios niveles, makedirs() entra en juego el método. Realmente, makedirs() se implementa de tal manera que llama mkdir() para crear un directorio tras otro.

    Como parámetro makedirs() acepta la ruta completa a crear. Este método es similar al comando UNIX / Linux mkdir -p. El Listado 4 muestra un ejemplo de cómo utilizar este método.

    import os
    
    # define the name of the directory to be created
    path = "/tmp/year/month/week/day"
    
    try:
        os.makedirs(path)
    except OSError:
        print ("Creation of the directory %s failed" % path)
    else:
        print ("Successfully created the directory %s" % path)
    

    Listado 3

    Crear un directorio temporal

    Hasta ahora, hemos creado entradas permanentes en el sistema de archivos. Por varias razones, como los datos de estacionamiento temporalmente, puede ser necesario tener un directorio temporal. los tempfile El módulo contiene métodos que manejan estos casos de una manera segura y consistente.

    El Listado 5 muestra un ejemplo que usa el TemporaryDirectory() método en combinación con el with declaración. Después de la with declaración, el directorio temporal ya no existe porque tanto el directorio como su contenido se han eliminado por completo.

    import tempfile
    
    # create a temporary directory
    with tempfile.TemporaryDirectory() as directory:
        print('The created temporary directory is %s' % directory)
    
    # directory and its contents have been removed by this point
    

    Listado 5

    El Listado 6 muestra la salida del script Python del Listado 5. Para crear archivos temporales, en los sistemas UNIX / Linux se prueban los tres directorios / tmp, / var / tmp y / usr / tmp, y la primera coincidencia de ellos se toma. En este caso actual, se utiliza el directorio / tmp.

    $ python3 mkdir-temporary.py
    The created temporary directory is /tmp/tmpf6o0hy3c
    

    Listado 6

    Eliminar un directorio

    Eliminar un directorio es el caso opuesto a crear uno. Puedes hacerlo usando el rmdir() método del os módulo. rmdir() requiere una cadena de ruta que contenga el nombre del directorio y solo elimina la entrada más profunda en la cadena de ruta. Tenga en cuenta que esto solo funciona cuando el directorio está completamente vacío. Si no está vacío, entonces un OSError es elevado. El Listado 7 muestra el código Python correspondiente.

    import os
    
    # define the name of the directory to be deleted
    path = "/tmp/year"
    
    try:
        os.rmdir(path)
    except OSError:
        print ("Deletion of the directory %s failed" % path)
    else:
        print ("Successfully deleted the directory %s" % path)
    

    Listado 7

    En caso de que desee eliminar un árbol de directorios completo, rmtree() método del shutil módulo le ayudará con esa tarea.

    Conclusión

    Como habrás notado, el manejo de directorios es muy simple en Python. Solo necesita unas pocas líneas de código para crear y eliminar este tipo de entrada de archivo.

    Enlaces y referencias

     

    Etiquetas:

    Deja una respuesta

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