Löschen des Download-Ordners mit einem Python-Programm

Einführung


Als eine Person, die gerade erst anfängt, Python zu lernen, versuche ich, durch direktes Üben neue Kenntnisse und Fähigkeiten zu erlangen. Meiner Meinung nach ist dieser Ansatz besser als das Ausarbeiten von Programmierhandbüchern und Multibänden. Zunächst versuche ich mit Projekten wie dem, über das ich sprechen werde, meine Bedürfnisse zu schließen. An zweiter Stelle steht die Hoffnung, dass jemand anderes für das, was ich erstelle, nützlich sein kann ( nachdem alle vorhandenen Fehler behoben wurden ).

Die Idee zu diesem Programm kam zu einer Zeit, als ich versuchte, eine zuvor heruntergeladene Datei unter dem im Ordner "Downloads" enthaltenen "Müll" zu finden. Bilder, Dokumente, Archive und Videos mit Musik: Sie könnten diese Verwirrung verstehen und Dateien natürlich filtern, aber Sie zögern wegen der hohen Zeitkosten. Und ich fand es schön, ein Programm zu haben, das den Ordner "Downloads" analysiert und die Dateien in die Standardordner der Systeme "Images", "Documents", "Videos" und "Music" verteilt und unnötige Dateien löscht. Als Ergebnis wurde der Perfektionist Organizer geboren, über den ich gerne sprechen möchte. Ich muss sofort sagen, dass dies ein Artikel von Anfänger zu Anfänger ist, da erfahrene Python-Programmierer hier nichts Nützliches finden ( außer der Fähigkeit, in den Code zu graben und auf viele Fehler hinzuweisen ).

Allgemeine Idee


Das erste, was ein Programm tun sollte, ist festzustellen, auf welchem ​​Betriebssystem es ausgeführt wird. Dies ist erforderlich, da sich der Download-Ordner unter Linux und Windows auf unterschiedliche Weise befindet (ich kann das Programm nicht auf einem Mac testen, da ich dieses Betriebssystem nicht berücksichtigt habe). Im erkannten Download-Ordner durchsucht das Programm alle verfügbaren Dateien und bestimmt, zu welchem ​​Typ sie gehören (Musik, Video, Dokumente usw.). Danach werden die erkannten Dateien in die Standardordner verschoben und das Programm findet vom Benutzer heraus, was mit den Dateien zu tun ist, die nicht zum Verschieben geeignet sind - verlassen oder löschen.

Importieren Sie die erforderlichen Bibliotheken und bestimmen Sie den Systemtyp


Um mit dem Betriebssystem und den darin enthaltenen Dateien arbeiten zu können, benötigen wir die Betriebssystembibliothek. Die getpass- Bibliothek informiert Sie über den Benutzernamen auf dem System und die Plattform bestimmt, ob es sich um Windows oder Linux handelt. Wir verbinden zu Beginn alle notwendigen Bibliotheken per Import und bestimmen dann den Betriebssystemtyp und den Benutzernamen.

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

Erstellen eines Wörterbuchs mit Erweiterungen beliebter Dateien und damit verbundenen Standardordnern


Mit Standard-Python-Tools erstellen wir vier Wörterbücher mit den beliebtesten Dateitypen: Musik, Bilder, Videos und Dokumente.

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

Vergessen Sie nicht, dass nach dem Ordnernamen der Dateiname weiterhin angezeigt wird, da ich am Ende / habe. Neue Dateitypen können einfach durch Bearbeiten des Wörterbuchs hinzugefügt werden.

Wir fragen den Benutzer nach dem Namen des Download-Ordners


Unter Windows und Linux wird der Download-Ordner auf dem System mit unterschiedlichen Namen angezeigt. Für Windows ist dies unabhängig von der Lokalisierung des Downloads-Ordners. Bei Linux-Distributionen wird dieser Ordner als "Downloads" bezeichnet. Außerdem kann es vorkommen, dass der Benutzer den Namen des Ordners mit den heruntergeladenen Dateien ändert und Sie fragen müssen, ob der aktuelle Name des Verzeichnisses von den Standardnamen abweicht.

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

Mit dem Konstrukt oder können Sie die Standardwerte für die Eingabe verwenden . Das heißt, wenn der Benutzer beim Herunterladen keine Änderungen am Namen des Ordners vorgenommen hat, muss nichts unternommen werden. Das Programm selbst ersetzt die erforderlichen Werte im weiteren Code.

Legen Sie den Pfad zum Download-Ordner fest


Je nach Betriebssystem befindet sich der Download-Ordner möglicherweise an verschiedenen Stellen. Unter Linux befindet sich dieser Ordner im Pfad / home / username / Downloads / , unter Windows im Pfad C: / Users / username / Downloads / . Um diese Pfade später nicht manuell vorzuschreiben, ist es einfacher, Variablen zu erstellen, in denen diese Pfade angegeben werden.

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

Legen Sie den Pfad zum Download-Ordner für einen bestimmten Benutzer fest


Um die Funktionen zuvor verbundener Module für die Arbeit mit dem Betriebssystem und den Dateien weiter nutzen zu können, müssen wir den Pfad zum Download-Ordner mithilfe der zuvor festgelegten und empfangenen Variablen festlegen.

 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) 

Nun, auch um die weitere Verwendung des Codes zu vereinfachen, legen wir den Pfad des Formulars / Home-Ordners / Benutzernamens fest

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

Suchen Sie im Download-Ordner nach bestimmten Dateien


Durch Auflisten des Wörterbuchs vergleichen wir seine Schlüssel mit den Dateierweiterungen im Download-Ordner. Wenn die Erweiterung mit dem Schlüssel übereinstimmt, muss die erforderliche Datei in den entsprechenden Standardordner verschoben werden (dessen Name der Wert im Wörterbuch ist).

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

Zunächst wollte ich das Problem der Suche nach Dateierweiterungen mithilfe regulärer Ausdrücke lösen und war mit deren Formulierung beschäftigt. Aber dann habe ich auf einer der Websites gelesen, dass, wenn Sie ein Problem lösen möchten, nur das Letzte, was Sie brauchen, um reguläre Ausdrücke zu verwenden. Python bietet andere einfachere und intuitivere Möglichkeiten, um die Anforderungen zu erfüllen. Daher wird anstelle dieser Ausdrücke die Dateierweiterung mithilfe der Zeichenfolgenmethodeendswith () bestimmt . Es nimmt den Schlüssel aus dem Wörterbuch und prüft, ob die Datei damit endet. Bei Verwendung der split () -Methode wird dann nur der Dateiname für die weitere Verschiebung mit os.rename () verwendet . Als Argumente des letzteren werden alle zuvor erstellten Variablen verwendet.

Wir fragen den Benutzer, was mit den verbleibenden Dateien zu tun ist.


Nachdem die erforderlichen Dateien sortiert wurden, muss das Programm die Dateien, die nicht verschoben wurden, entweder beenden oder löschen (z. B. exe-Dateien oder Deb-Pakete). Die Entscheidung wird vom Benutzer getroffen, standardmäßig erfolgt keine Löschung.

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

Zusammenfassend


Ich habe versucht zu erklären, wie das von mir erstellte Programm so klar wie möglich funktioniert. Aber ich denke, dass diejenigen, die verstehen wollen, den Code selbst noch mehrmals überprüfen werden. Perfectionist Organizer ist in zwei Versionen erhältlich - Konsole und Grafik. Sie finden beide auf dem Link zu meinem Github , und es gibt Anweisungen zum Herunterladen und Verwenden des Programms. Ich habe die Konsolenversion auf meinem Hauptbetriebssystem (Archlinux) und die GUI-Version in einer virtuellen Maschine unter Windows 7 ausgeführt. In beiden Fällen arbeitete das Programm mit einem Knall. Ich möchte auch eine Demo anhängen, wie es unter Linux funktioniert. Wenn dieses Thema für jemanden interessant ist, werde ich Ihnen im nächsten Artikel erklären, wie ich die GUI-Version erstellt habe und auf welche Schwierigkeiten ich gestoßen bin.

Demonstration des Perfektionisten-Organisators
Bild

Zukunftspläne


Als nächstes folgt ein Programm, das Sie an wichtige Ereignisse aus der Google Sheets-Tabelle in Telegram erinnert. Sobald ich fertig bin, werde ich es dir hier sagen. Sie können Fragen und Feedback zur Arbeit des Perfektionisten-Organisators in den Kommentaren oder in der PM hinterlassen. Vielen Dank für Ihre Aufmerksamkeit!

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


All Articles