Python-Skripte zum regelmäßigen Löschen der Dateien

Das regelmäßige manuelle Reinigen des Dateisystems ist nicht gut. Automatisieren Sie sie!

Das manuelle Löschen von Dateien und Ordnern ist keine spannende Aufgabe, wie man meinen könnte. Es ist sinnvoll, sie zu automatisieren.

Hier kommt Python, um unser Leben einfacher zu machen. Python ist eine hervorragende Programmiersprache für Skripte. Wir werden Python nutzen, um unsere Aufgabe ohne Hindernisse zu beenden. Zunächst sollten Sie wissen, warum Python eine gute Wahl ist.

  • Python ist eine allzeit beliebte Sprache für die Automatisierung von Aufgaben
  • Weniger Code im Vergleich zu anderen Programmiersprachen
  • Python ist mit allen Betriebssystemen kompatibel. Sie können denselben Code unter Windows, Linux und Mac ausführen.
  • Python hat ein Modul namens os, das uns hilft, mit dem Betriebssystem zu interagieren. Wir werden dieses Modul verwenden, um unsere Automatisierung des Löschens der Dateien abzuschließen.

Wir können alle lästigen oder sich wiederholenden Systemaufgaben mit Python ersetzen. Das Schreiben von Skripten zum Ausführen einer bestimmten Systemaufgabe ist ein Kinderspiel, wenn Sie Python kennen. Sehen wir uns den folgenden Anwendungsfall an.

Hinweis: Folgendes wurde auf Python 3.6+ getestet

Entfernen von Dateien/Ordnern, die älter als X Tage sind

Oft benötigen Sie keine alten Protokolle und müssen diese regelmäßig bereinigen, um Speicherplatz verfügbar zu machen. Es könnte alles sein und nicht nur Protokolle.

Wir haben eine Methode namens stat im os-Modul, die Details zur Zeit des letzten Zugriffs (st_atime), der Änderung (st_mtime) und der Änderung der Metadaten (st_ctime) liefert. Alle Methoden geben die Zeit in Sekunden seit der Epoche zurück. Weitere Details zur Epoche finden Sie hier.

Wir verwenden eine Methode namens os.walk(path) zum Durchlaufen der Unterordner eines Ordners.

Führen Sie die folgenden Schritte aus, um Code für die Löschdateien/-ordner basierend auf der Anzahl der Tage zu schreiben.

  • Importieren Sie die Module time, os, shutdown
  • Legen Sie den Pfad und die Tage für die Variablen fest
  • Konvertieren Sie die Anzahl der Tage mit der Methode time.time() in Sekunden
  • Überprüfen Sie, ob der Pfad existiert oder nicht, indem Sie das Modul os.path.exists(path) verwenden
  • Wenn der Pfad vorhanden ist, erhalten Sie die Liste der Dateien und Ordner, die im Pfad vorhanden sind, einschließlich Unterordnern. Verwenden Sie die Methode os.walk(path), und sie gibt einen Generator zurück, der Ordner, Dateien und Unterordner enthält
  • Rufen Sie den Pfad der Datei oder des Ordners ab, indem Sie sowohl den aktuellen Pfad als auch den Datei-/Ordnernamen mit der Methode os.path.join() verknüpfen.
  • Rufen Sie die ctime aus der Methode os.stat(path) mit dem Attribut st_ctime ab
  • Vergleichen Sie die ctime mit der zuvor berechneten Zeit
  • Wenn das Ergebnis größer ist als die gewünschten Tage des Benutzers, dann prüfen Sie, ob es sich um eine Datei oder einen Ordner handelt. Wenn es sich um eine Datei handelt, verwenden Sie os.remove(path), andernfalls verwenden Sie die Methode shutdown.rmtree()
  • Wenn der Pfad nicht existiert, drucke die Nachricht nicht gefunden
  So beheben Sie, dass das Google Meet-Mikrofon nicht funktioniert

Sehen wir uns den Code im Detail an.

# importing the required modules
import os
import shutil
import time

# main function
def main():

	# initializing the count
	deleted_folders_count = 0
	deleted_files_count = 0

	# specify the path
	path = "/PATH_TO_DELETE"

	# specify the days
	days = 30

	# converting days to seconds
	# time.time() returns current time in seconds
	seconds = time.time() - (days * 24 * 60 * 60)

	# checking whether the file is present in path or not
	if os.path.exists(path):
		
		# iterating over each and every folder and file in the path
		for root_folder, folders, files in os.walk(path):

			# comparing the days
			if seconds >= get_file_or_folder_age(root_folder):

				# removing the folder
				remove_folder(root_folder)
				deleted_folders_count += 1 # incrementing count

				# breaking after removing the root_folder
				break

			else:

				# checking folder from the root_folder
				for folder in folders:

					# folder path
					folder_path = os.path.join(root_folder, folder)

					# comparing with the days
					if seconds >= get_file_or_folder_age(folder_path):

						# invoking the remove_folder function
						remove_folder(folder_path)
						deleted_folders_count += 1 # incrementing count


				# checking the current directory files
				for file in files:

					# file path
					file_path = os.path.join(root_folder, file)

					# comparing the days
					if seconds >= get_file_or_folder_age(file_path):

						# invoking the remove_file function
						remove_file(file_path)
						deleted_files_count += 1 # incrementing count

		else:

			# if the path is not a directory
			# comparing with the days
			if seconds >= get_file_or_folder_age(path):

				# invoking the file
				remove_file(path)
				deleted_files_count += 1 # incrementing count

	else:

		# file/folder is not found
		print(f'"{path}" is not found')
		deleted_files_count += 1 # incrementing count

	print(f"Total folders deleted: {deleted_folders_count}")
	print(f"Total files deleted: {deleted_files_count}")


def remove_folder(path):

	# removing the folder
	if not shutil.rmtree(path):

		# success message
		print(f"{path} is removed successfully")

	else:

		# failure message
		print(f"Unable to delete the {path}")



def remove_file(path):

	# removing the file
	if not os.remove(path):

		# success message
		print(f"{path} is removed successfully")

	else:

		# failure message
		print(f"Unable to delete the {path}")


def get_file_or_folder_age(path):

	# getting ctime of the file/folder
	# time will be in seconds
	ctime = os.stat(path).st_ctime

	# returning the time
	return ctime


if __name__ == '__main__':
	main()

Sie müssen die folgenden zwei Variablen im obigen Code basierend auf der Anforderung anpassen.

days = 30 
path = "/PATH_TO_DELETE"

Entfernen von Dateien, die größer als X GB sind

Lassen Sie uns nach den Dateien suchen, die größer als eine bestimmte Größe sind, und sie löschen. Es ähnelt dem obigen Skript. Im vorherigen Skript haben wir das Alter als Parameter genommen, und jetzt nehmen wir die Größe als Parameter für die Löschung.

# importing the os module
import os

# function that returns size of a file
def get_file_size(path):

	# getting file size in bytes
	size = os.path.getsize(path)

	# returning the size of the file
	return size


# function to delete a file
def remove_file(path):

	# deleting the file
	if not os.remove(path):

		# success
		print(f"{path} is deleted successfully")

	else:

		# error
		print(f"Unable to delete the {path}")


def main():
	# specify the path
	path = "ENTER_PATH_HERE"

	# put max size of file in MBs
	size = 500

	# checking whether the path exists or not
	if os.path.exists(path):

		# converting size to bytes
		size = size * 1024 * 1024

		# traversing through the subfolders
		for root_folder, folders, files in os.walk(path):

			# iterating over the files list
			for file in files:
				
				# getting file path
				file_path = os.path.join(root_folder, file)

				# checking the file size
				if get_file_size(file_path) >= size:
					# invoking the remove_file function
					remove_file(file_path)
			
		else:

			# checking only if the path is file
			if os.path.isfile(path):
				# path is not a dir
				# checking the file directly
				if get_file_size(path) >= size:
					# invoking the remove_file function
					remove_file(path)


	else:

		# path doesn't exist
		print(f"{path} doesn't exist")

if __name__ == '__main__':
	main()

Passen Sie die folgenden beiden Variablen an.

path = "ENTER_PATH_HERE" 
size = 500

Entfernen von Dateien mit einer bestimmten Erweiterung

Es kann ein Szenario geben, in dem Sie Dateien nach ihren Erweiterungstypen löschen möchten. Sagen wir .log-Datei. Wir können die Erweiterung einer Datei mit der Methode os.path.splitext(path) finden. Es gibt ein Tupel zurück, das den Pfad und die Erweiterung der Datei enthält.

# importing os module
import os

# main function
def main():
    
    # specify the path
    path = "PATH_TO_LOOK_FOR"
    
    # specify the extension
    extension = ".log"
    
    # checking whether the path exist or not
    if os.path.exists(path):
        
        # check whether the path is directory or not
        if os.path.isdir(path):
        
            # iterating through the subfolders
            for root_folder, folders, files in os.walk(path):
                
                # checking of the files
                for file in files:

                    # file path
                    file_path = os.path.join(root_folder, file)

                    # extracting the extension from the filename
                    file_extension = os.path.splitext(file_path)[1]

                    # checking the file_extension
                    if extension == file_extension:
                        
                        # deleting the file
                        if not os.remove(file_path):
                            
                            # success message
                            print(f"{file_path} deleted successfully")
                            
                        else:
                            
                            # failure message
                            print(f"Unable to delete the {file_path}")
        
        else:
            
            # path is not a directory
            print(f"{path} is not a directory")
    
    else:
        
        # path doen't exist
        print(f"{path} doesn't exist")

if __name__ == '__main__':
    # invoking main function
    main()

Vergessen Sie nicht, den Pfad und die Erweiterungsvariable im obigen Code zu aktualisieren, um Ihre Anforderungen zu erfüllen.

  Beste Tools zur Maximierung der Netzwerkbandbreite und Analyse der Nutzung

Ich würde vorschlagen, die Skripte in der NICHT-PRODUKTIONS-Umgebung zu testen. Sobald Sie mit den Ergebnissen zufrieden sind, können Sie über cron (bei Verwendung von Linux) eine regelmäßige Ausführung für Wartungsarbeiten planen. Python ist großartig, um diese Dinge zu erreichen, und wenn Sie daran interessiert sind, mehr zu lernen, dann schauen Sie sich das an Udemy-Kurs.

Haben Sie den Artikel gerne gelesen? Wie wäre es mit dem Teilen mit der Welt?