Breaking

Post Top Ad

Your Ad Spot

viernes, 14 de junio de 2019

Introducción al módulo Python OS

En este tutorial, aprenderá a trabajar junto con el osmódulo de Python .

Tabla de contenido

  1. Introducción
  2. Funciones básicas
  3. Listar archivos / carpetas en el directorio de trabajo actual
  4. Cambiar el directorio de trabajo
  5. Crear una estructura de directorio única y anidada
  6. Eliminar la estructura de directorios única y anidada de forma recursiva
  7. Ejemplo con procesamiento de datos
  8. Conclusión

Introducción

Python es uno de los idiomas 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 le permite al desarrollador usar varias funcionalidades dependientes del sistema operativo con el módulo Python osEste paquete resume 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 a importar este paquete, sus funcionalidades básicas y un proyecto de ejemplo en Python que utiliza esta biblioteca para una tarea de fusión de datos.

Algunas funciones básicas

Vamos a explorar el módulo con algún código de ejemplo.
Importar la biblioteca:
import os  
Vamos a obtener 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, utilizando el getcwdmétodo, podemos recuperar la ruta del directorio de trabajo actual.
print(os.getcwd())  
Salida:
C:\Users\hpandya\OneDrive\work\StackAbuse\os_python\os_python\Project  

Listar carpetas y archivos

Listemos las carpetas / archivos en el directorio actual usando listdir:
print(os.listdir())  
Salida:
['Data', 'Population_Data', 'README.md', 'tutorial.py', 'tutorial_v2.py']
Como puedes ver, tengo 2 carpetas: DataPopulation_DataTambién tengo 3 archivos: README.mdarchivo de reducción de marca, y dos archivos de Python a saber, tutorial.pytutorial_v2.py.
Para obtener la estructura de árbol completa de la carpeta de mi proyecto, escribamos una función y luego utilicemos 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 utilizando la ruta actual del directorio de trabajo, lo que vimos cómo hacerlo 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 a /y los archivos dentro de las carpetas se han sangrado cuatro espacios a la derecha. La Datacarpeta tiene un archivo csv llamado uscitiesv1.4.csvEste archivo tiene datos sobre la población de cada ciudad en los Estados Unidos. La carpeta Population_Datatiene carpetas para Estados, que contienen archivos CSV separados para datos de población para cada estado, extraídos de uscitiesv1.4.csv.

Cambiar el directorio de trabajo

Cambiemos el directorio de trabajo e ingresemos en el directorio de datos con el estado de "Nueva York".
os.chdir('Population_Data/New York')  
Ahora vamos a ejecutar el list_filesmétodo de nuevo, pero en este directorio.
list_files(os.getcwd())  
Salida:
New York/  
    New York_population.csv
Como puede ver, hemos ingresado a la New Yorkcarpeta debajo de la Population_Datacarpeta.

Crear una estructura de directorio única y anidada

Ahora, vamos a crear un nuevo directorio llamado testdiren 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.
Vamos a crear 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'  
Obtenemos un error. Para ser específicos, obtenemos una FileNotFoundErrorQuizás se pregunte por qué hay un FileNotFounderror cuando intentamos crear un directorio.
El motivo: el módulo de Python busca un directorio llamado level1dirpara crear el directorio level2dirDado level1dirque no existe, en primer lugar, arroja un FileNotFoundError.
Para fines como este, mkdirs()se utiliza la función en su lugar, que puede crear múltiples directorios de forma recursiva.
os.makedirs('level1dir/level2dir')  
Compruebe 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 en la New Yorkcarpeta. testdirlevel1dirlevel1dirTiene un directorio debajo llamado level2dir.

Eliminar directorios únicos y múltiples recursivamente

El osmó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 directorio actual para verificar que el directorio ya no existe:
list_files(os.getcwd())  
Salida:
New York/  
    New York_population.csv
    level1dir/
        level2dir/
Como puedes ver, testdirha sido eliminado.
Intentemos eliminar la estructura de directorios anidada de level1dirlevel2dir.
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 una OSErrory con razón. Dice que el level1dirdirectorio no está vacío. Eso es correcto porque tiene level2dirdebajo de él.
Con el rmdirmétodo no es posible eliminar un directorio no vacío, similar a la versión de línea de comandos de Unix.
Al igual que el makedirs()método, vamos a intentarlo rmdirs(), lo que elimina de forma recursiva los directorios 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 directorios anidada. Ahora veamos un ejemplo de cómo el osmó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+'/'+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 osmó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 las diferentes capacidades del osmódulo incorporado de Python También vimos un breve ejemplo de cómo se puede utilizar el módulo en el mundo de Data Science and Analytics. Es importante comprender que ostiene mucho más que ofrecer y, según la necesidad del desarrollador, se puede construir una lógica mucho más compleja.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas