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 *