Suchen/Löschen bestimmter Dateien in ALLEN Laufwerken

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ste8899
User
Beiträge: 3
Registriert: Dienstag 22. Mai 2018, 07:18

Hallo liebe Python-Community,
ich bin relativ neu in diesen Themengebiet und bräuchte ein wenig Hilfe bei meinem neuen Skript.

Also ich soll ein Skript schreiben das ALLE Laufwerke und alle Unterverzeichnisse, nach Dateien durchsucht mit dem Datentyp *.prt und wenn welche vorhanden sind diese gelöscht werden.


import SearchFiles habe ich nochmal unter dem Hauptorgramm aufgelistet

Bis lang habe ich:

Code: Alles auswählen

import sys, shutil, os, glob,time, fnmatch, win32api
from datetime import datetime, timedelta
import SearchFiles

# Laufwerke finden.

driveslist = win32api. GetLogicalDriveStrings()
ListeMitLaufwerken = driveslist.split('\000') [:-1]
print(driveslist)

#os.chdir('D:\Downloads')
datei= '*.prt'
directory = r"D:\Dokumente\Test\*.prt"
dateiengesamt = []

# Über alle Laufwerke und Ordner suchen.
print("Folgende Datein wurden gefunden:")

# Durch neue Funktion ersetzen und für jeden Laufwerksbuchstaben ausführen.
#for elem in driveslist:
 #   dateiengesamt += SearchFiles.searchfiles(elem)


for path in glob.glob(directory):
    print( path )
print( '-'*40 )
listeDateien = glob.glob(directory)

# Anzahl aller gefundenen Dateien.
if (len(listeDateien)) == 0:
    print("Es sind keine Protokolle vorhanden")
    sys.exit()
else:
    print("Die Anzahl der gefundenen Protokolle liegt bei:", (len(listeDateien)))

# Ausgabe wirklich löschen?
print("Wollen Sie alle Prtokolle löschen(ja oder nein eingeben)?")
loeschen = input()

#Benutzer fragen ob gelöscht werden soll.
if loeschen == "ja":
    # Datei entfernen
    for elem in listeDateien:

        file_mtime = datetime.fromtimestamp(os.path.getmtime(elem))
        max_mtime = datetime.now() - timedelta(seconds=60)

        if file_mtime < max_mtime:
            try:
                os.remove(elem)
                print("Alle Protokolle die älter als 2 Monate sind, wurden entfernt")
            except:
                print("Fehler beim löschen der Protokolle")

else:
    print("Sie haben den Vorgang abgebrochen")
    sys.exit()
-------------------------------------------------------------------------------------------------------------------------------------------------------
Searchfiles:

Code: Alles auswählen

from pathlib import Path
import os
import pandas as pd

def searchfiles(laufwerk):
    suffixes = []
    returnfiles = []
    for root, dirs, files in os.walk(laufwerk):  # root = Path, dirs = folders, files = files
        for file in Path(str(root)).iterdir():
            if file.suffix == '.prt':  # oder -> file.stem == 'filename'
                #print('Path: ', root, '\nFiles:', files, '\n')
                returnfiles.append(os.path.join(root, files))
                df = pd.DataFrame([root])
                df.to_clipboard(index=False, header=False)

    return returnfiles
Ich versteh nicht wie ich im Skript sagen kann, dass ALLE Laufwerke inklusive aller Unterverzeichnisse/Ordner durchsucht werden und wie ich Searchfiles richtig mit dem Hauptprogramm einbinde.
Wäre cool wenn mir jemand mein Skript anpasst/verbessert oder mir Tipps und Vorschläge gibt.


Danke im Vorraus :D

Gruß
ste8899
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

`os.walk` geht schon alle Verzeichnisse mit allen Dateien durch. Diese innere for-Schleife in `searchfiles` ist also doppelt und überflüssig. Ein os.path.join auf eine Liste mit Strings ist nicht richtig. Was soll denn die Funktion, etwas ans Clipboard zu schicken und diesen Text immer wieder zu überschreiben? Weg damit.

Das Hauptskript braucht dringend einige Funktionen. Das ist so durcheinander, dass man es kaum verstehen kann. Es werden etliche Module importiert, die nicht gebraucht werden. Räum da mal ein bißchen auf. Niemals nackte excepts benutzen. Verwende immer so konkrete Exceptions wie mögliche (hier OSError). `max_mtime` sollte man einmal vor der Schleife bestimmen. Statt dem Slice in Zeile 8 besser strip auf 0-Bytes verwenden. `sys.exit` hat in einem ordentlichen Programm nichts zu suchen.

Dann überlege Dir, welche Schritte Du zum Lösen Deines Problems brauchst, und erst dann, wie Du jeden Einzelschritt mit den schon vorhandenen Funktionen lösen kannst.
Antworten