Introducci贸n al m贸dulo del sistema operativo Python

    Introducci贸n

    Python es uno de los lenguajes m谩s utilizados en los 煤ltimos tiempos para diversas tareas como procesamiento de datos, an谩lisis de datos y creaci贸n de sitios web. En este proceso, hay varias tareas que dependen del sistema operativo. Python permite al desarrollador usar varias funcionalidades dependientes del sistema operativo con el m贸dulo Python os. Este paquete abstrae las funcionalidades de la plataforma y proporciona las funciones de Python para navegar, crear, eliminar y modificar archivos y carpetas. En este tutorial, uno puede esperar aprender c贸mo importar este paquete, sus funcionalidades b谩sicas y un proyecto de muestra en Python que usa esta biblioteca para una tarea de fusi贸n de datos.

    Algunas funciones b谩sicas

    Exploremos el m贸dulo con un c贸digo de ejemplo.

    Importar la biblioteca:

    import os
    

    Consigamos la lista de m茅todos que podemos usar con este m贸dulo.

    print(dir(os))
    

    Salida:

    ['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_execvpe', '_exists', '_exit', '_fspath', '_get_exports_list', '_putenv', '_unsetenv', '_wrap_close', 'abc', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 'fspath', 'fstat', 'fsync', 'ftruncate', 'get_exec_path', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sep', 'set_handle_inheritable', 'set_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 'stat_float_times', 'stat_result', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sys', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write']
    

    Ahora, usando el getcwd m茅todo, podemos recuperar la ruta del directorio de trabajo actual.

    print(os.getcwd())
    

    Salida:

    C:UsershpandyaOneDriveworkPharos.shos_pythonos_pythonProject
    

    Enumerar carpetas y archivos

    Hagamos una lista de las carpetas / archivos en el directorio actual usando listdir:

    print(os.listdir())
    

    Salida:

    ['Data', 'Population_Data', 'README.md', 'tutorial.py', 'tutorial_v2.py']
    

    Como puede ver, tengo 2 carpetas: Data y Population_Data. Tambi茅n tengo 3 archivos: README.md archivo de rebajas y dos archivos de Python, a saber, tutorial.py y tutorial_v2.py.

    Para obtener la estructura de 谩rbol completa de la carpeta de mi proyecto, escribamos una funci贸n y luego usemos os.walk() para iterar sobre todos los archivos en cada carpeta del directorio actual.

    # function to list files in each folder of the current working directory
    
    def list_files(startpath):
        for root, dirs, files in os.walk(startpath):
            # print(dirs)
            if dir!= '.git':
                level = root.replace(startpath, '').count(os.sep)
                indent=" " * 4 * (level)
                print('{}{}/'.format(indent, os.path.basename(root)))
                subindent=" " * 4 * (level + 1)
                for f in files:
                    print('{}{}'.format(subindent, f))
    

    Llame a esta funci贸n usando la ruta del directorio de trabajo actual, que vimos c贸mo hacer antes:

    startpath = os.getcwd()
    list_files(startpath)
    

    Salida:

    Project/
        README.md
        tutorial.py
        tutorial_v2.py
        Data/
            uscitiesv1.4.csv
        Population_Data/
            Alabama/
                Alabama_population.csv
            Alaska/
                Alaska_population.csv
            Arizona/
                Arizona_population.csv
            Arkansas/
                Arkansas_population.csv
            California/
                California_population.csv
            Colorado/
                Colorado_population.csv
            Connecticut/
                Connecticut_population.csv
            Delaware/
                Delaware_population.csv
            ...
    

    Nota: La salida se ha truncado por brevedad.

    Como se ve en la salida, los nombres de las carpetas terminan con un / y los archivos dentro de las carpetas se han sangrado cuatro espacios a la derecha. los Data la carpeta tiene un archivo csv llamado uscitiesv1.4.csv. Este archivo tiene datos sobre la poblaci贸n de cada ciudad de los Estados Unidos. La carpeta Population_Data tiene carpetas para los estados, que contienen archivos csv separados para los datos de poblaci贸n de cada estado, extra铆dos de uscitiesv1.4.csv.

    Cambiar directorio de trabajo

    Cambiemos el directorio de trabajo y entremos en el directorio de datos con el estado de “Nueva York”.

    os.chdir('Population_Data/New York')
    

    Ahora ejecutemos el list_files m茅todo de nuevo, pero en este directorio.

    list_files(os.getcwd())
    

    Salida:

    New York/
        New York_population.csv
    

    Como puede ver, hemos entrado en el New York carpeta debajo Population_Data carpeta.

    Crear una estructura de directorio 煤nica y anidada

    Ahora, creemos un nuevo directorio llamado testdir en este directorio.

    os.mkdir('testdir')
    
    list_files(os.getcwd())
    

    Salida:

    New York/
        New York_population.csv
        testdir/
    

    Como puede ver, crea el nuevo directorio en el directorio de trabajo actual.

    Creemos un directorio anidado con 2 niveles.

    os.mkdir('level1dir/level2dir')
    

    Salida:

    Traceback (most recent call last):
    
      File "<ipython-input-12-ac5055572301>", line 1, in <module>
        os.mkdir('level1dir/level2dir')
    
    FileNotFoundError: [WinError 3] The system cannot find the path specified: 'level1dir/level2dir'
    

    Recibimos un error. Para ser espec铆ficos, obtenemos un FileNotFoundError. Podr铆as preguntarte por qu茅 un FileNotFound error cuando intentamos crear un directorio.

    La raz贸n: el m贸dulo de Python busca un directorio llamado level1dir para crear el directorio level2dir. Ya que level1dir no existe, en primer lugar, lanza un FileNotFoundError.

    Para prop贸sitos como este, el mkdirs() En su lugar, se utiliza la funci贸n, que puede crear varios directorios de forma recursiva.

    os.makedirs('level1dir/level2dir')
    

    Verifique el 谩rbol de directorios actual,

    list_files(os.getcwd())
    

    Salida:

    New York/
        New York_population.csv
        level1dir/
            level2dir/
        testdir/
    

    Como podemos ver, ahora tenemos dos subdirectorios bajo New York carpeta. testdir y level1dir. level1dir tiene un directorio debajo llamado level2dir.

    Eliminar directorios 煤nicos y m煤ltiples de forma recursiva

    los os El m贸dulo tambi茅n ten铆a m茅todos para modificar o eliminar directorios, que mostrar茅 aqu铆.

    Ahora, eliminemos los directorios que acabamos de crear usando rmdir:

    os.rmdir('testdir')
    

    Verifique el 谩rbol de directorios actual para verificar que el directorio ya no existe:

    list_files(os.getcwd())
    

    Salida:

    New York/
        New York_population.csv
        level1dir/
            level2dir/
    

    Como se puede ver, testdir ha sido eliminado.

    Intentemos eliminar la estructura de directorios anidada de level1dir y level2dir.

    os.rmdir('level1dir')
    

    Salida:

    OSError
    Traceback (most recent call last)
    <ipython-input-14-690e535bcf2c> in <module>()
    ----> 1 os.rmdir('level1dir')
    
    OSError: [WinError 145] The directory is not empty: 'level1dir'
    

    Como se ve, esto arroja un OSError y con raz贸n. Dice level1dir el directorio no est谩 vac铆o. Eso es correcto porque tiene level2dir debajo de ello.

    Con el rmdir m茅todo no es posible eliminar un directorio que no est茅 vac铆o, similar a la versi贸n de l铆nea de comandos de Unix.

    Como el makedirs() m茅todo, intentemos rmdirs(), que elimina directorios de forma recursiva en una estructura de 谩rbol.

    os.removedirs('level1dir/level2dir')
    

    Veamos de nuevo la estructura del 谩rbol de directorios:

    list_files(os.getcwd())
    

    Salida:

    New York/
        New York_population.csv
    

    Esto nos lleva al estado anterior del directorio.

    Ejemplo con procesamiento de datos

    Hasta ahora hemos explorado c贸mo ver, crear y eliminar una estructura de directorio anidada. Ahora veamos un ejemplo de c贸mo os El m贸dulo ayuda en el procesamiento de datos.

    Para eso vamos a subir un nivel en la estructura de directorios.

    os.chdir('../')
    

    Con eso, veamos nuevamente la estructura del 谩rbol de directorios.

    list_files(os.getcwd())
    

    Salida:

    Population_Data/
        Alabama/
            Alabama_population.csv
        Alaska/
            Alaska_population.csv
        Arizona/
            Arizona_population.csv
        Arkansas/
            Arkansas_population.csv
        California/
            California_population.csv
        Colorado/
            Colorado_population.csv
        Connecticut/
            Connecticut_population.csv
        Delaware/
            Delaware_population.csv
    ...
    

    Nota: La salida se ha truncado por brevedad.

    Combinemos los datos de todos los estados, iterando sobre el directorio de cada estado y fusionando los archivos CSV de la misma manera.

    import os
    import pandas as pd
    
    # create a list to hold the data from each state
    list_states = []
    
    # iteratively loop over all the folders and add their data to the list
    for root, dirs, files in os.walk(os.getcwd()):
        if files:
            list_states.append(pd.read_csv(root+"https://Pharos.sh.com/"+files[0], index_col=None))
    
    # merge the dataframes into a single dataframe using Pandas library
    merge_data = pd.concat(list_states[1:], sort=False)
    

    Gracias en parte al os m贸dulo que pudimos crear merge_data, que es un marco de datos que contiene datos de poblaci贸n de cada estado.

    Conclusi贸n

    En este art铆culo, exploramos brevemente diferentes capacidades de las funciones integradas de Python os m贸dulo. Tambi茅n vimos un breve ejemplo de c贸mo se puede utilizar el m贸dulo en el mundo de la ciencia de datos y el an谩lisis. Es importante entender que os tiene mucho m谩s que ofrecer y, en funci贸n de la necesidad del desarrollador, se puede construir una l贸gica mucho m谩s compleja.

     

    Etiquetas:

    Deja una respuesta

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