Effacement du dossier de téléchargements à l'aide d'un programme Python

Présentation


En tant que personne qui commence tout juste à apprendre le Python, j'essaie d'acquérir de nouvelles connaissances et compétences grâce à la pratique directe. À mon avis, cette approche est meilleure que l'élaboration de guides de programmation et de multi-volumes. Tout d’abord, avec des projets comme celui dont je vais parler, j’essaie de combler mes besoins. En second lieu, l'espoir que quelqu'un d'autre puisse être utile pour ce que je crée ( après que toutes les erreurs existantes ont été corrigées )

L'idée de ce programme est venue à un moment où j'essayais de trouver un fichier précédemment téléchargé parmi les "ordures" formées dans le dossier "Téléchargements". Images, documents, archives et vidéos avec de la musique: vous pouvez comprendre cette confusion et filtrer les fichiers, bien sûr, mais vous êtes réticent à cause des coûts de temps importants. Et j'ai pensé que c'était bien d'avoir un programme qui analysera le dossier "Téléchargements" et distribuera les fichiers dans les dossiers standard des systèmes "Images", "Documents", "Vidéos" et "Musique", et supprimera les fichiers inutiles. En conséquence, l'Organisateur Perfectionniste est né, dont je voudrais parler. Je dois dire tout de suite qu'il s'agit d'un article d'un débutant à un débutant, car les programmeurs Python expérimentés ne trouveront rien d'utile ici ( sauf la possibilité de creuser dans le code et de signaler beaucoup d'erreurs ).

Idée générale


La première chose qu'un programme doit faire est de déterminer dans quel système d'exploitation il s'exécute. Cela est nécessaire car sous Linux et Windows, le dossier Téléchargements est situé de différentes manières (je n'ai pas la possibilité de tester le programme sur un Mac, car je n'ai pas pris en compte ce système d'exploitation). Dans le dossier de téléchargement détecté, le programme parcourt tous les fichiers disponibles et détermine à quel type ils appartiennent (musique, vidéo, documents, etc.). Après cela, les fichiers détectés sont déplacés vers les dossiers par défaut et le programme découvre à l'utilisateur ce qu'il faut faire avec les fichiers qui ne sont pas adaptés au déplacement - quitter ou supprimer.

Importez les bibliothèques requises et déterminez le type de système


Pour travailler avec le système d'exploitation et les fichiers qu'il contient, nous avons besoin de la bibliothèque os . La bibliothèque getpass vous fera connaître le nom d'utilisateur sur le système, et la plate - forme déterminera s'il s'agit de Windows ou Linux. Nous connectons toutes les bibliothèques nécessaires au tout début via l'importation, puis déterminons le type de système d'exploitation et le nom d'utilisateur.

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

Création d'un dictionnaire avec des extensions de fichiers populaires et des dossiers par défaut qui leur sont associés


En utilisant des outils Python standard, nous créons quatre dictionnaires avec les types de fichiers les plus populaires: musique, images, vidéos et documents.

 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" : "/"} 

N'oubliez pas qu'après le nom du dossier le nom du fichier ira toujours, car à la fin j'ai /. De nouveaux types de fichiers sont facilement ajoutés en modifiant le dictionnaire.

Nous demandons à l'utilisateur le nom du dossier de téléchargement


Sous Windows et Linux, le dossier de téléchargement apparaît sur le système avec des noms différents. Pour Windows, ceci est indépendamment de la localisation du dossier Téléchargements, puis sur les distributions Linux, ce dossier est appelé «Téléchargements». De plus, il peut arriver que l'utilisateur modifie le nom du dossier avec les fichiers téléchargés et vous devez demander si le nom actuel du répertoire diffère des noms standard.

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

La construction or vous permet d'utiliser les valeurs par défaut en entrée . Autrement dit, si l'utilisateur n'a aucun changement dans le nom du dossier avec les téléchargements, il n'y a rien à faire, le programme lui-même remplacera les valeurs nécessaires dans le code suivant.

Définissez le chemin d'accès au dossier de téléchargement


Selon le système d'exploitation, le dossier de téléchargement peut se trouver à différents endroits. Pour Linux, ce dossier se trouve sur le chemin / home / nom d'utilisateur / Téléchargements / , sous Windows c'est le chemin C: / Utilisateurs / nom d'utilisateur / Téléchargements / . Afin de ne pas prescrire ces chemins manuellement plus tard, il est plus facile de créer des variables dans lesquelles ces chemins seront spécifiés.

 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"/" 

Définissez le chemin d'accès au dossier de téléchargement pour un utilisateur spécifique


Afin d'utiliser davantage les capacités des modules précédemment connectés pour travailler avec le système d'exploitation et les fichiers, nous devons définir le chemin d'accès au dossier de téléchargement en utilisant les variables que nous avons créées et reçues précédemment.

 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) 

Eh bien, également pour plus de commodité dans l'utilisation du code, nous définissons le chemin du formulaire / dossier de départ / nom d'utilisateur

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

Recherchez des fichiers spécifiques dans le dossier de téléchargement


En énumérant le dictionnaire, nous comparons ses clés avec les extensions de fichier qui se trouvent dans le dossier de téléchargement. Si l'extension correspond à la clé, le fichier nécessaire doit être déplacé vers le dossier par défaut correspondant (dont le nom est la valeur dans le dictionnaire).

 #      .  ,      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) 

Au départ, j'avais prévu de résoudre le problème de la recherche d'extensions de fichiers en utilisant des expressions régulières et je me suis engagé dans leur formulation. Mais j'ai lu sur l'un des sites que si vous voulez résoudre un problème, alors seulement la dernière chose dont vous avez besoin pour utiliser des expressions régulières. Python a d'autres moyens plus faciles et plus intuitifs de faire ce qui vous est demandé. Par conséquent, au lieu de ces expressions, l'extension de fichier est déterminée à l'aide de la méthode de chaîne endswith () . Il prend la clé du dictionnaire et vérifie si le fichier se termine avec. Ensuite, en utilisant la méthode split () , seul le nom du fichier est pris pour un déplacement ultérieur à l'aide de os.rename () . Comme arguments de ce dernier, toutes les variables précédemment créées sont utilisées.

Nous demandons à l'utilisateur quoi faire avec les fichiers restants.


Une fois les fichiers nécessaires triés, le programme doit soit terminer, soit supprimer les fichiers qui ne tombent pas sous le coup (par exemple, les fichiers exe ou les paquets deb). La décision est prise par l'utilisateur; par défaut, la suppression ne se produit pas.

 #        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('  .   .') 

Pour résumer


J'ai essayé d'expliquer comment le programme que j'ai créé fonctionnait aussi clairement que possible. Mais je pense que ceux qui veulent comprendre continueront de revoir le code lui-même plusieurs fois. Perfectionist Organizer est disponible en deux versions - console et graphique. Vous pouvez trouver les deux sur le lien vers mon Github , et il y a des instructions sur la façon de télécharger et d'utiliser le programme. J'ai exécuté la version console sur mon système d'exploitation principal (Archlinux) et la version GUI dans une machine virtuelle sur Windows 7. Dans les deux cas, le programme a fonctionné avec un bang. Je veux également joindre une démonstration de son fonctionnement sous Linux. Si ce sujet est intéressant pour quelqu'un, alors dans le prochain article je vous dirai comment j'ai fait la version GUI et quelles difficultés j'ai rencontrées.

Démonstration de l'organisateur perfectionniste
image

Plans futurs


Next in line est un programme qui vous rappellera les événements importants de la table Google Sheets dans Telegram. Dès que je l'aurai terminé, je vous le dirai ici. Vous pouvez laisser des questions et des commentaires sur le travail de l'organisateur perfectionniste dans les commentaires ou dans PM. Merci de votre attention!

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


All Articles