Logotipo de Zephyrnet

Gestión de carpetas en Python

Fecha:

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 os
importacion
tiempo de importación
desde 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 nuevo
 si no os.path.exists (nueva ruta): os.makedirs (nueva ruta)
 os.chdir('C:')
 # Configuración de las carpetas de origen y destino
 dir_src = ruta+"/"
 dir_dst = nueva ruta
 # Para archivos SQL
 si 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 DOCX
 si 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 DOC
 si 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 PDF
 si 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 TXT
 si 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 OUTLOOK
 si 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 EXCEL
 si 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 = Verdadero
 si 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 Python
 si 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 JPEG
 si 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 PNG
 si 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 = Verdadero
 print(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:

Salida de resultados | Gestión de carpetas en Python

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

código de automatización
Ingresos
Gestión de carpetas en Python

El mensaje de éxito aparece como se muestra a continuación.

Gestión de carpetas en Python

La carpeta está organizada y se ve así:

Gestión de carpetas en Python
Gestión de carpetas en Python

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

Crear condiciones de excepción

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

Gestión de carpetas en Python

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. 

punto_img

Información más reciente

punto_img