Borrar la carpeta de descargas usando un programa Python

Introduccion


Como una persona que recién comienza a aprender Python, trato de obtener nuevos conocimientos y habilidades a través de la práctica directa. En mi opinión, este enfoque es mejor que elaborar guías de programación y volúmenes múltiples. En primer lugar, con proyectos como el del que hablaré, estoy tratando de cerrar mis necesidades. En segundo lugar está la esperanza de que alguien más pueda ser útil para lo que creo ( después de que se hayan solucionado todos los errores existentes )

La idea de este programa surgió en un momento en que estaba tratando de encontrar un archivo descargado previamente entre la "basura" formada en la carpeta "Descargas". Imágenes, documentos, archivos y videos con música: por supuesto, podría comprender esta confusión y filtrar archivos, pero es reacio debido a los grandes costos de tiempo. Y pensé que es bueno tener un programa que analice la carpeta "Descargas" y distribuya los archivos en las carpetas estándar de los sistemas "Imágenes", "Documentos", "Videos" y "Música", y elimine los archivos innecesarios. Como resultado, nació el Organizador Perfeccionista, del que me gustaría hablar. Debo decir de inmediato que este es un artículo para principiantes y principiantes, porque los programadores experimentados de Python no encontrarán nada útil aquí ( excepto la capacidad de profundizar en el código y señalar muchos errores ).

Idea general


Lo primero que debe hacer un programa es determinar en qué sistema operativo se está ejecutando. Esto es necesario porque en Linux y Windows la carpeta de Descargas se encuentra de diferentes maneras (no tengo la capacidad de probar el programa en una Mac, porque no tuve en cuenta este sistema operativo). En la carpeta de descarga detectada, el programa revisa todos los archivos disponibles y determina a qué tipo pertenecen (música, video, documentos, etc.). Después de eso, los archivos detectados se mueven a las carpetas predeterminadas y el programa descubre del usuario qué hacer con esos archivos que no son adecuados para mover: dejar o eliminar.

Importe las bibliotecas necesarias y determine el tipo de sistema


Para trabajar con el sistema operativo y los archivos que contiene, necesitamos la biblioteca os . La biblioteca getpass le permitirá conocer el nombre de usuario en el sistema, y ​​la plataforma determinará si es Windows o Linux. Conectamos todas las bibliotecas necesarias al principio a través de la importación y luego determinamos el tipo de sistema operativo y el nombre de usuario.

import os import getpass import platform type_os = platform.system() usermane = getpass.getuser() 

Crear un diccionario con extensiones de archivos populares y carpetas predeterminadas asociadas a ellos


Con las herramientas estándar de Python, creamos cuatro diccionarios con los tipos de archivos más populares: música, imágenes, videos y documentos.

 video_folder = {".3gp" : "/", ".avi" : "/", ".flv" : "/", ".m4v" : "/", ".mkv" : "/", ".mov" : "/", ".mp4" : "/", ".wmv" : "/", ".webm" : "/"} music_folder = {".mp3" : "/", ".aac": "/", ".flac" : "/", ".mpc" : "/", ".wma" : "/", ".wav" : "/"} pic_folder = {".raw" : "/", ".jpg" : "/", ".tiff" : "/", ".psd" : "/", ".bmp" : "/", ".gif" : "/", ".png" : "/", ".jp2" : "/", ".jpeg" : "/"} doc_folder = {".doc" : "/", ".docx" : "/", ".txt" : "/", ".rtf" : "/", ".pdf" : "/", ".fb2" : "/", ".djvu" : "/", ".xls" : "/", ".xlsx" : "/", ".ppt" : "/", ".pptx" : "/", ".mdb" : "/", ".accdb" : "/", ".rar" : "/", ".zip" : "/", ".7z" : "/"} 

No olvides que después del nombre de la carpeta el nombre del archivo continuará, porque al final tengo /. Los nuevos tipos de archivos se agregan fácilmente editando el diccionario.

Le pedimos al usuario el nombre de la carpeta de descarga


En Windows y Linux, la carpeta de descarga aparece en el sistema con diferentes nombres. Para Windows, esto es independientemente de la localización de la carpeta Descargas, luego, en las distribuciones de Linux, esta carpeta se llama "Descargas". Además, puede suceder que el usuario cambie el nombre de la carpeta con los archivos descargados y deba preguntar si el nombre actual del directorio difiere de los estándares.

 if type_os == "Linux": user_downloads_path = input("      ? (-: ) ") or "" if type_os == "Windows": user_downloads_path = input("      ? (-: ) ") or "Downloads" 

La construcción o le permite usar los valores predeterminados en la entrada . Es decir, si el usuario no tiene cambios en el nombre de la carpeta de descarga, no hay necesidad de hacer nada, el programa sustituirá los valores necesarios en el código adicional.

Establecer la ruta a la carpeta de descarga


Dependiendo del sistema operativo, la carpeta de descarga puede estar ubicada en diferentes lugares. Para Linux, esta carpeta se encuentra en la ruta / inicio / nombre de usuario / Descargas / , mientras que en Windows es la ruta C: / Usuarios / nombre de usuario / Descargas / . Para no prescribir estas rutas manualmente más adelante, es más fácil crear variables en las que se especificarán estas rutas.

 if type_os == "Linux": default_path_d = "/home/" + usermane + "/" + user_downloads_path + "/" else: default_path_d_win = r"C:/Users/" + usermane + r"/" + user_downloads_path+ r"/" 

Establecer la ruta a la carpeta de descarga para un usuario específico


Para poder seguir utilizando las capacidades de los módulos conectados previamente para trabajar con el sistema operativo y los archivos, debemos establecer la ruta a la carpeta de descarga utilizando las variables que creamos y recibimos anteriormente.

 if type_os == "Linux": downloads_path = os.listdir("/home/" + usermane + "/" + user_downloads_path) else: downloads_path_win = os.listdir(r"C:/Users/" + usermane + r"/" + user_downloads_path) 

Bueno, también para la conveniencia de un mayor uso del código, establecemos la ruta del formulario / carpeta de inicio / nombre de usuario

 if type_os == "Linux": default_path_u = "/home/" + usermane + "/" else: default_path_u_win = r"C:/Users/" + usermane + r"/" 

Verifique los archivos específicos en la carpeta de descarga


Al enumerar el diccionario, comparamos sus claves con las extensiones de archivo que se encuentran en la carpeta de descarga. Si la extensión coincide con la clave, el archivo necesario debe moverse a la carpeta predeterminada correspondiente (cuyo nombre es el valor en el diccionario).

 #      .  ,      for music_format in music_folder: if type_os == "Linux": for name_file in downloads_path: if name_file.endswith(music_format): result = name_file.split(str(music_format), 1) os.rename(default_path_d + result[0] + music_format, default_path_u + music_folder.get(music_format) + result[0] + music_format) if type_os == "Windows": for name_file in downloads_path_win: if name_file.endswith(music_format): result = name_file.split(str(music_format), 1) os.rename(default_path_d_win + result[0] + music_format, default_path_u_win + "Music" + r"/" + result[0] + music_format) #      .  ,      for pic_format in pic_folder: if type_os == "Linux": for name_file in downloads_path: if name_file.endswith(pic_format): result = name_file.split(str(pic_format), 1) os.rename(default_path_d + result[0] + pic_format, default_path_u + pic_folder.get(pic_format) + result[0] + pic_format) if type_os == "Windows": for name_file in downloads_path_win: if name_file.endswith(pic_format): result = name_file.split(str(pic_format), 1) os.rename(default_path_d_win + result[0] + pic_format, default_path_u_win + "Pictures" + r"/" + result[0] + pic_format) #        .  ,      for doc_format in doc_folder: if type_os == "Linux": for name_file in downloads_path: if name_file.endswith(doc_format): result = name_file.split(str(doc_format), 1) os.rename(default_path_d + result[0] + doc_format, default_path_u + doc_folder.get(doc_format) + result[0] + doc_format) if type_os == "Windows": for name_file in downloads_path_win: if name_file.endswith(doc_format): result = name_file.split(str(doc_format), 1) os.rename(default_path_d_win + result[0] + doc_format, default_path_u_win + "Documents" + r"/" + result[0] + doc_format) 

Inicialmente, planeé resolver el problema de encontrar extensiones de archivo utilizando expresiones regulares y participé en su formulación. Pero luego leí en uno de los sitios que si quieres resolver un problema, solo lo último que necesitas es usar expresiones regulares. Python tiene otras formas más fáciles e intuitivas de hacer lo que se requiere de usted. Por lo tanto, en lugar de estas expresiones, la extensión del archivo se determina utilizando el método de cadena endswith () . Toma la clave del diccionario y comprueba si el archivo termina con él. Luego, usando el método split () , solo se toma el nombre del archivo para un mayor movimiento usando os.rename () . Como argumentos de este último, se utilizan todas las variables creadas previamente.

Le preguntamos al usuario qué hacer con los archivos restantes.


Después de ordenar los archivos necesarios, el programa debe terminar o eliminar aquellos archivos que no se incluyeron en el movimiento (por ejemplo, archivos exe o paquetes deb). La decisión la toma el usuario; de manera predeterminada, no se elimina.

 #        delete_user_confirm = input('     ?     (-: ) ' or '') if delete_user_confirm == '': if type_os == "Linux": files_to_remove = os.listdir(default_path_d) for remove_files in files_to_remove: os.remove(default_path_d + "/" + remove_files) if type_os == "Windows": files_to_remove = os.listdir(default_path_d_win) for remove_files in files_to_remove: os.remove(default_path_d_win + "/" + remove_files) else: print('  .   .') 

Para resumir


Traté de explicar cómo el programa que creé funcionó lo más claro posible. Pero creo que aquellos que quieran entender aún revisarán el código en sí varias veces. Perfectionist Organizer está disponible en dos versiones: consola y gráfica. Puede encontrar ambos en el enlace a mi Github , y hay instrucciones sobre cómo descargar y usar el programa. Ejecuté la versión de consola en mi sistema operativo principal (Archlinux) y la versión de GUI en una máquina virtual en Windows 7. En ambos casos, el programa funcionó con una explosión. También quiero adjuntar una demostración de cómo funciona en Linux. Si este tema es interesante para alguien, en el próximo artículo le contaré cómo hice la versión de GUI y qué dificultades encontré.

Demostración del organizador perfeccionista
imagen

Planes futuros


El siguiente en la línea es un programa que le recordará eventos importantes de la tabla de Hojas de cálculo de Google en Telegram. Tan pronto como lo termine te lo diré aquí. Puede dejar cualquier pregunta y comentarios sobre el trabajo del organizador perfeccionista en los comentarios o en PM. Gracias por su atencion!

Source: https://habr.com/ru/post/468311/


All Articles