Este artículo fue publicado como parte del Blogatón de ciencia de datos.
General
“O eres el que crea la automatización o te estás automatizando”. Tom Preston-Werner.
En todos los aspectos de la vida moderna, y se puede utilizar en cualquier industria. La automatización minimiza la intervención humana y elimina la realización de tareas repetitivas.
Python es uno de los muchos lenguajes excelentes que se pueden usar para una automatización extensa. Se pueden crear secuencias de comandos de Python para soluciones automatizadas innovadoras como extraer datos, manipular documentos, trabajar con archivos de imagen, resolver ecuaciones complejas, trabajar con sistemas de archivos, etc. Este artículo utilizará el sistema de archivos y automatizará la estructuración de archivos en la carpeta deseada.
Objetivo
Crearemos un pequeño código Python que automatizará la estructuración de archivos en una carpeta. Se necesitan tres entradas:
1. Camino que necesita estructuración
2. Nombre de la carpeta deseada que se creará
3. Tipo de archivo que necesita estructuración
Actualmente, el código admite los siguientes tipos de archivos: SQL, DOCX, DOC, PDF, TXT, MSG, XLSX, XLS, PY, JPEG, PNG. Sin embargo, el código se puede ampliar fácilmente para admitir otros tipos de archivos.
Nota: El código se puede ampliar en función de más casos de uso. Es decir, se puede hacer más codificación encima. Esta automatización tiene fines de aprendizaje para mostrar cómo se pueden usar los sistemas de archivos en Python.
Planteamiento del problema: En este artículo, tenemos varios archivos en una carpeta, incluidos tres archivos de Excel y tres documentos. Queremos estructurar todos los archivos de documentos en una sola carpeta. Especificamos las tres entradas que se muestran arriba en el código, lo que da como resultado la carpeta deseada creada con los archivos necesarios. Hemos tomado una pequeña estructura de carpetas como entrada para probar el código. Sin embargo, este código tendrá más sentido cuando la carpeta tenga muchos archivos y necesitemos una estructuración rápida.
Implementación
Importador bibliotecas
Estamos usando cuatro bibliotecas: os, shutil, time y sys.
1. El módulo os proporciona una forma si se usa la funcionalidad dependiente del sistema operativo. Puedes usar así enlace para leer más
2. El módulo shutil proporciona una forma de operaciones en archivos y recopilación de archivos. Puedes usar así enlace para leer más
3. El módulo de tiempo proporciona funciones relacionadas con el tiempo. Puedes usar así enlace para leer más
4. El módulo de salida se usa para salir de un programa cuando ocurre un error. Puedes usar así enlace para leer más
importar osimportaciontiempo de importacióndesde la salida de importación del sistema
Tomando entradas del usuario
Este código requiere tomar ciertas entradas del usuario.
1. Ruta: el usuario debe especificar la ruta completa de la carpeta que requiere administración. Si el usuario especifica una ruta incorrecta o la ruta no existe, el código se cerrará y no se ejecutarán más líneas.
2. Nombre de la carpeta: el usuario debe especificar el nombre de una nueva carpeta que se creará después de la estructuración. Este código está escrito para permitir flexibilidad a los usuarios para dar los nombres deseados
3. Tipo de archivo: como el código se ejecuta en un solo tipo de archivo una vez a la vez, la entrada del usuario debe especificarse para proporcionar el tipo de archivo deseado que necesita estructuración.
ruta = entrada ("Ingrese la ruta donde necesita reestructurar. Se creará una nueva carpeta allí: ")si no (os.path.isdir(ruta)) : print("La ruta - "+ruta+" no existe. Ingrese la ruta correcta. Salga...") time.sleep(2) exit(1)nombre_carpeta = entrada("Ingrese el nombre de la carpeta que desea crear: ") tipo_archivo = entrada("Ingrese el tipo de archivo que desea estructurar desde "+ruta+" en la carpeta anterior "+nombre_carpeta+" (SQL,DOCX, Se aceptan los formatos DOC, PDF, TXT, MSG, XLSX, XLS, PY, JPEG, PNG): ") nueva ruta = ruta + "/" + nombre_carpeta tipo_archivo_encontrado = Falso
Script de automatización dentro del bloque try-except
Escribir el cuerpo principal del script de python que ejecutará la estructuración
intentar :# Si newpath no existe, crea uno nuevosi no os.path.exists (nueva ruta): os.makedirs (nueva ruta)os.chdir('C:')# Configuración de las carpetas de origen y destinodir_src = ruta+"/"dir_dst = nueva ruta# Para archivos SQLsi file_type en ('SQL','sql','.SQL','.sql') :para nombre de archivo en os.listdir(dir_src):si nombre de archivo.termina con('.sql'):shutil.move( dir_src + nombre de archivo, dir_dst)tipo_archivo_encontrado = Verdadero# Para archivos DOCXsi file_type in ('docx','DOCX','.docx','.DOCX') :para nombre de archivo en os.listdir(dir_src):si nombre de archivo.termina con('.docx'):shutil.move( dir_src + nombre de archivo, dir_dst)tipo_archivo_encontrado = Verdadero# Para archivos DOCsi file_type in ('doc','DOC','.doc','.DOC') :para nombre de archivo en os.listdir(dir_src):si nombre de archivo.termina con('.doc'):shutil.move( dir_src + nombre de archivo, dir_dst)tipo_archivo_encontrado = Verdadero# Para archivos PDFsi file_type in ('pdf','PDF','.pdf','.PDF') :para nombre de archivo en os.listdir(dir_src):si el nombre del archivo.termina con('.pdf'):shutil.move( dir_src + nombre de archivo, dir_dst)tipo_archivo_encontrado = Verdadero# Para archivos TXTsi file_type in ('txt','TXT','.txt','.TXT') :para nombre de archivo en os.listdir(dir_src):si el nombre del archivo.termina con('.txt'):shutil.move( dir_src + nombre de archivo, dir_dst)tipo_archivo_encontrado = Verdadero# Para archivos de MENSAJES DE OUTLOOKsi file_type in ('msg','MSG','.msg','.MSG') :para nombre de archivo en os.listdir(dir_src):if filename.endswith('.msg'):shutil.move( dir_src + nombre de archivo, dir_dst)tipo_archivo_encontrado = Verdadero# Para archivos EXCELsi file_type in ('xlsx','XLSX','.xlsx','.XLSX') :para nombre de archivo en os.listdir(dir_src):si nombre de archivo.termina con('.xlsx'):shutil.move( dir_src + nombre de archivo, dir_dst)tipo_archivo_encontrado = Verdaderosi file_type in ('xls','XLS','.xls','.XLS', 'xlsx', '.xlsx') :para nombre de archivo en os.listdir(dir_src):si nombre de archivo.termina con('.xls'):shutil.move( dir_src + nombre de archivo, dir_dst)tipo_archivo_encontrado = Verdadero# Para archivos de secuencias de comandos de Pythonsi file_type in ('py','PY','.py','.PY') :para nombre de archivo en os.listdir(dir_src):si nombre de archivo.termina con('.py'):shutil.move( dir_src + nombre de archivo, dir_dst)tipo_archivo_encontrado = Verdadero# Para archivos JPEGsi file_type en ('jpeg','JPEG','.jpeg','.JPEG') :para nombre de archivo en os.listdir(dir_src):si nombre de archivo.termina con('.jpeg'):shutil.move( dir_src + nombre de archivo, dir_dst)tipo_archivo_encontrado = Verdadero# Para archivos PNGsi file_type in ('png','PNG','.png','.PNG') :para nombre de archivo en os.listdir(dir_src):si nombre de archivo.termina con('.png'):shutil.move( dir_src + nombre de archivo, dir_dst)tipo_archivo_encontrado = Verdaderoprint(nombre_carpeta, 'creado con éxito!')excepto OSError: print("La ruta proporcionada por usted: "+ruta+" no existe");si no se encuentra_tipo_de_archivo:print("No ."+file_type+" el tipo de archivo está presente en la ruta: "+ruta+". Así que saliendo...")si os.path.exists (nueva ruta): os.removedirs (nueva ruta)tiempo de sueño (2)salir (1)
El razonamiento para usar el bloque Try-Except
Siempre es bueno manejar excepciones dentro de su código para eliminar bloqueos de código no deseados. Estamos usando el bloque try-except en este código porque la entrada del usuario puede ser inesperada. Nuestro código de Python aún se ejecutaría y le daría al usuario un mensaje de error adecuado para comprender si el código se ejecutó con éxito o no.
Hay dos tipos distinguibles de errores: errores de sintaxis y excepciones. Los errores de sintaxis son errores de análisis que encontramos cuando escribimos una sintaxis incorrecta, como la falta de color después del bucle for, la falta de corchetes después de la impresión, la sangría incorrecta después de la condición if, etc. El error encontrado durante la ejecución se denomina excepciones. Los ejemplos son el error de división por cero, el error de nombre, el error de tipo, etc. Si bien es necesario manejar ambos tipos de errores, las excepciones se pueden manejar usando el bloque try-except. Si las excepciones no se manejan bien, interrumpirá el programa con un mensaje de error incomprensible para los usuarios. El mensaje de error adecuado permite a los usuarios finales apreciar si el programa se ha ejecutado con éxito o no. Puede leer más sobre el manejo de errores esta página.
Salida de resultados
Supongamos que mi carpeta tiene los siguientes archivos:
Quiero estructurar todos mis archivos Docx usando este código de automatización. Ejecuto el archivo python y doy entradas de usuario como se muestra a continuación. La carpeta que queremos crear es BKP_DOCS, y queremos estructurar todo el tipo de archivo DOCX
El mensaje de éxito aparece como se muestra a continuación.
La carpeta está organizada y se ve así:
Creación de condiciones de excepción
Es necesario probar las condiciones de contorno para que cualquier programa se ejecute sin interrupciones. Mostraremos las dos condiciones de excepción aquí:
1. Ruta de la carpeta incorrecta: la ruta de la carpeta es incorrecta. El usuario puede especificar una forma incorrecta, algún error ortográfico o la ruta de la carpeta no existe. En este caso, nuestro programa no debería continuar y dar un mensaje de error adecuado. En la imagen de abajo, ingreso una ruta que no existe en mi sistema; me sale el siguiente mensaje
2. Tipo de archivo incorrecto: el tipo de archivo es incorrecto. El usuario puede especificar un nombre aleatorio como tipo de archivo o un tipo de archivo que aún no está codificado en el programa. En tal caso también, el código debe salir con un mensaje de error adecuado, como se muestra a continuación. En nuestro caso, especificamos "ABC" como tipo de archivo. Dado que no es válido, el código se cierra y no se ejecuta más
Los mensajes de error son correctos y fáciles de entender. El usuario puede corregir las entradas del usuario con los mensajes fallidos. De esta manera, podemos crear casos de prueba de condiciones de contorno. Debemos probar nuestros programas minuciosamente antes de enviarlos a producción o de que los utilicen los usuarios finales.
Conclusión
Espero que este artículo explique en detalle el enunciado del problema de automatización y su solución. De esta manera, podemos automatizar usando un sistema de archivos en Python. La automatización del sistema de archivos puede ser divertida y desafiante, y se pueden crear muchos casos de uso diferentes. Un caso de uso más sofisticado en esta área puede ser la creación de carpetas para todos los tipos de archivos presentes con una ruta de entrada de usuario dada. De modo que el usuario solo necesita proporcionar la ruta de la carpeta como entrada. El programa creará tantas carpetas como tipos de archivos y agrupará tipos de archivos similares en la carpeta. Los usuarios interesados pueden probar esto y ampliar el código para este caso de uso. ¡Feliz automatización!
Leer más blogs sobre Python esta página.
Fuentes de imagen – Autor
Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.