Hallo,
gibt es eine Möglichkeit wie ich einen Verzeichnis Ordner mit einem bestimmten Namen löschen kann?
Ich habe bisher nichts gefunden was wirklich verlässlich funktioniert.
Vielen Dank im voraus.
Mit freundlichen Grüßen
TheBombTuber
Ordner mit bestimmten Namen suchen
-
- User
- Beiträge: 49
- Registriert: Samstag 9. September 2017, 15:48
TheBombTuber hat geschrieben: ↑Montag 3. Dezember 2018, 13:28 Hallo,
gibt es eine Möglichkeit wie ich einen Verzeichnis Ordner mit einem bestimmten Namen löschen kann?
Ich habe bisher nichts gefunden was wirklich verlässlich funktioniert.
Vielen Dank im voraus.
Mit freundlichen Grüßen
TheBombTuber
Mir ist gerade aufgefallen, dass ich die Frage sehr offen formuliert habe.
Um es also noch einmal etwas zu spezifizieren:
Ich möchte das mir aus einem Verzeichnis alle Ordner gelöscht werden welche z.B. das Wort "Test" in ihrem Namen haben.
Also, dass das Skript die Ordner "Test1", "Test_1", "Test2" aus dem Verzeichnis löschen würde
Suchst Du jetzt einen Ordner mit bestimmtem Namen oder willst Du ihn löschen. Und enthält der Ordner noch Daten (shutil.rmtree) oder ist er schon leer (os.rmdir).
Und was heißt `verlässlich funktioniert`? Was hast Du versucht und was ist der Fehler?
EDIT: also suchst Du glob.
Und was heißt `verlässlich funktioniert`? Was hast Du versucht und was ist der Fehler?
EDIT: also suchst Du glob.
-
- User
- Beiträge: 49
- Registriert: Samstag 9. September 2017, 15:48
Ich suche die Ordner um sie zu löschen.Sirius3 hat geschrieben: ↑Montag 3. Dezember 2018, 14:12 Suchst Du jetzt einen Ordner mit bestimmtem Namen oder willst Du ihn löschen. Und enthält der Ordner noch Daten (shutil.rmtree) oder ist er schon leer (os.rmdir).
Und was heißt `verlässlich funktioniert`? Was hast Du versucht und was ist der Fehler?
EDIT: also suchst Du glob.
Der Pfad in dem ich suche ist fest und lautet "C:\cad\VWG\catia\vwgrclite\opt\aft"
Gelöscht werden sollen daraus alle Ordner welche "CONNECT_" im Namen haben
In den Ordnern "CONNECT_" befinden sich noch Daten.
Getestet habe ich ein Skript aus einem anderen Beitrag viewtopic.php?f=1&t=37764&hilit=Ordner+ ... mten+namen aber es ist zu ungenau (oder ich wende es falsch an)
Code: Alles auswählen
import os
def get_folders(base_dir, search_name):
for dir_name, sub_directories, filenames in os.walk(base_dir):
if search_name in sub_directories:
return os.path.join(dir_name)
def main():
root_dir = 'C:\\'
seek_dir = 'VLC'
dir_name = get_folders(root_dir, 'VLC')
print(dir_name + '\\' + seek_dir + '\\')
if __name__ == "__main__":
main()
@TheBombTuber: das was Du da zusammenkopiert hast, ist ja noch eine sehr frühe Version mit vielen Fehlern und auch nicht auf Dein Problem anwendbar.
Trotzdem solltest Du erklären, warum das Ergebnis zu ungenau ist. Denn sonst muß sich jeder selbst zusammenreimen, was Du damit meinst.
Wie schon geschrieben, Du suchst nach `glob` und `shutil.rmtree`.
Trotzdem solltest Du erklären, warum das Ergebnis zu ungenau ist. Denn sonst muß sich jeder selbst zusammenreimen, was Du damit meinst.
Wie schon geschrieben, Du suchst nach `glob` und `shutil.rmtree`.
-
- User
- Beiträge: 49
- Registriert: Samstag 9. September 2017, 15:48
Ich habe nun eine Lösung für mein Problem. Ich suche erst mit einem regulärem ausdruck nach allem was CONNECT enthält lasse mir die nacheinander mit .group() aufrufen und löschen. sieht folgendermaßen aus.Sirius3 hat geschrieben: ↑Montag 3. Dezember 2018, 14:56 @TheBombTuber: das was Du da zusammenkopiert hast, ist ja noch eine sehr frühe Version mit vielen Fehlern und auch nicht auf Dein Problem anwendbar.
Trotzdem solltest Du erklären, warum das Ergebnis zu ungenau ist. Denn sonst muß sich jeder selbst zusammenreimen, was Du damit meinst.
Wie schon geschrieben, Du suchst nach `glob` und `shutil.rmtree`.
Code: Alles auswählen
# -*- coding: utf-8 -*-
"""
Created on Mon Dec 3 08:26:39 2018
@author: cpohlmann
"""
import os, time, sys, shutil, re
if os.path.isdir(r"C:\cad\VWG\catia\vwgrclite\opt\aft"):
try:
#hier kommt das Löschen
while True:
try:
os.chdir(r'C:\cad\VWG\catia\vwgrclite\opt\aft')
files = os.listdir()
x = re.search(r"CONNECT\w+",str(files))
s = x.group()
if os.path.isdir(r"C:\cad\VWG\catia\vwgrclite\opt\aft" +"\\" + s):
print(r"C:\cad\VWG\catia\vwgrclite\opt\aft" +"\\" + s + " wird entfernt")
time.sleep(2)
shutil.rmtree(s)
time.sleep(2)
continue
except AttributeError:
break
shutil.rmtree(r"C:\cad\VWG\catia\vwgrclite\opt\aft\CONNECT_11043_5")
shutil.copytree(r"\\srv-23v-isea-01\temp\CPO\IT\Connect update\windows\components\cnctclientw-aftconnect\data\CONNECT_12010_4", r"C:\cad\VWG\catia\vwgrclite\opt\aft\CONNECT_12010_4")
time.sleep(2)
print("Austausch erfolgreich")
sys.exit()
except FileNotFoundError:
shutil.copytree(r"\\srv-23v-isea-01\temp\CPO\IT\Connect update\windows\components\cnctclientw-aftconnect\data\CONNECT_12010_4", r"C:\cad\VWG\catia\vwgrclite\opt\aft\CONNECT_12010_4")
print("Austausch erfolgreich")
sys.exit()
elif os.path.isdir(r"C:\CATIAV5\VWG\catia\vwgrclite\opt\aft"):
try:
while True:
try:
os.chdir(r'C:\CATIAV5\VWG\catia\vwgrclite\opt\aft')
files2 = os.listdir()
x2 = re.search(r"CONNECT\w+",str(files2))
s2 = x2.group()
if os.path.isdir(r"C:\cad\VWG\catia\vwgrclite\opt\aft" +"\\" + s2):
print(r"C:\cad\VWG\catia\vwgrclite\opt\aft" +"\\" + s2 + " wird entfernt")
time.sleep(2)
shutil.rmtree(s2)
time.sleep(2)
continue
except AttributeError:
break
shutil.rmtree(r"C:\CATIAV5\VWG\catia\vwgrclite\opt\aft\CONNECT_11043_5")
shutil.copytree(r"\\srv-23v-isea-01\temp\CPO\IT\Connect update\windows\components\cnctclientw-aftconnect\data\CONNECT_12010_4", r"C:\CATIAV5\VWG\catia\vwgrclite\opt\aft\CONNECT_12010_4")
time.sleep(2)
print("Austausch erfolgreich")
sys.exit()
except FileNotFoundError:
shutil.copytree(r"\\srv-23v-isea-01\temp\CPO\IT\Connect update\windows\components\cnctclientw-aftconnect\data\CONNECT_12010_4", r"C:\CATIAV5\VWG\catia\vwgrclite\opt\aft\CONNECT_12010_4")
print("Austausch erfolgreich")
sys.exit()
Was hat bei `glob` nicht funktioniert?
Zu Deinem jetzigen Programm: Du hast zwei identische Blöcke, das löst man mit einer Funktion. `os.chdir` sollte nicht verwendet werden, weil es einen globalen Zustand ändert und listdir auch einen Parameter mit dem Pfad unterstützt.
Die String-Representation einer Liste ist nur für Debug-Zwecke da, nicht um darin mit regulären Ausdrücken zu suchen. Wenn ein Regulärer Ausdruck nicht gefunden wird, dann prüft man auf den Rückgabewert None und fängt nicht den AttributError ab; das ist total undurchsichtig.
Was sollen die sleep?
Statt der while-Schleife solltest Du einfach eine for-Schleife benutzen. Es ist doch umständlich, jedes mal wieder das gesamte Verzeichnis zu durchsuchen, nur um wieder den ersten CONNECT-Eintrag zu finden.
Was ist denn das besondere an `CONNECT_11043_5` dass Du das noch extra löschen willst? Wenn die Schleife funktioniert, sollte es schon weg sein.
sys.exit hat in einem ordenlichen Programm nichts zu suchen.
oder eben mit `glob`:
Zu Deinem jetzigen Programm: Du hast zwei identische Blöcke, das löst man mit einer Funktion. `os.chdir` sollte nicht verwendet werden, weil es einen globalen Zustand ändert und listdir auch einen Parameter mit dem Pfad unterstützt.
Die String-Representation einer Liste ist nur für Debug-Zwecke da, nicht um darin mit regulären Ausdrücken zu suchen. Wenn ein Regulärer Ausdruck nicht gefunden wird, dann prüft man auf den Rückgabewert None und fängt nicht den AttributError ab; das ist total undurchsichtig.
Was sollen die sleep?
Statt der while-Schleife solltest Du einfach eine for-Schleife benutzen. Es ist doch umständlich, jedes mal wieder das gesamte Verzeichnis zu durchsuchen, nur um wieder den ersten CONNECT-Eintrag zu finden.
Was ist denn das besondere an `CONNECT_11043_5` dass Du das noch extra löschen willst? Wenn die Schleife funktioniert, sollte es schon weg sein.
sys.exit hat in einem ordenlichen Programm nichts zu suchen.
Code: Alles auswählen
# -*- coding: utf-8 -*-
import os
import time
import sys
import shutil
import re
def remove_files(path):
for filename in os.listdir(path):
if filename.startswith('CONNECT'):
print(os.path.join(path, filename) + " wird entfernt")
shutil.rmtree(os.path.join(path, filename))
for path in [
r"C:\cad\VWG\catia\vwgrclite\opt\aft",
r"C:\CATIAV5\VWG\catia\vwgrclite\opt\aft",
]:
if os.path.isdir(path):
remove_files(path)
shutil.copytree(r"\\srv-23v-isea-01\temp\CPO\IT\Connect update\windows\components\cnctclientw-aftconnect\data\CONNECT_12010_4", os.path.join(path, 'CONNECT_12010_4'))
print("Austausch erfolgreich")
break
Code: Alles auswählen
def remove_files(path):
for filename in glob.glob(os.path.join(path, 'CONNECT*'):
print("{} wird entfernt".format(filename))
shutil.rmtree(filename)
-
- User
- Beiträge: 49
- Registriert: Samstag 9. September 2017, 15:48
Vielen Dank für die Hinweise Ich habe mich vorerst für deinen ersten Vorschlag entschieden, da ich dort die genauen Abläufe besser verstehe.Sirius3 hat geschrieben: ↑Montag 3. Dezember 2018, 18:28 Was hat bei `glob` nicht funktioniert?
Zu Deinem jetzigen Programm: Du hast zwei identische Blöcke, das löst man mit einer Funktion. `os.chdir` sollte nicht verwendet werden, weil es einen globalen Zustand ändert und listdir auch einen Parameter mit dem Pfad unterstützt.
Die String-Representation einer Liste ist nur für Debug-Zwecke da, nicht um darin mit regulären Ausdrücken zu suchen. Wenn ein Regulärer Ausdruck nicht gefunden wird, dann prüft man auf den Rückgabewert None und fängt nicht den AttributError ab; das ist total undurchsichtig.
Was sollen die sleep?
Statt der while-Schleife solltest Du einfach eine for-Schleife benutzen. Es ist doch umständlich, jedes mal wieder das gesamte Verzeichnis zu durchsuchen, nur um wieder den ersten CONNECT-Eintrag zu finden.
Was ist denn das besondere an `CONNECT_11043_5` dass Du das noch extra löschen willst? Wenn die Schleife funktioniert, sollte es schon weg sein.
sys.exit hat in einem ordenlichen Programm nichts zu suchen.oder eben mit `glob`:Code: Alles auswählen
# -*- coding: utf-8 -*- import os import time import sys import shutil import re def remove_files(path): for filename in os.listdir(path): if filename.startswith('CONNECT'): print(os.path.join(path, filename) + " wird entfernt") shutil.rmtree(os.path.join(path, filename)) for path in [ r"C:\cad\VWG\catia\vwgrclite\opt\aft", r"C:\CATIAV5\VWG\catia\vwgrclite\opt\aft", ]: if os.path.isdir(path): remove_files(path) shutil.copytree(r"\\srv-23v-isea-01\temp\CPO\IT\Connect update\windows\components\cnctclientw-aftconnect\data\CONNECT_12010_4", os.path.join(path, 'CONNECT_12010_4')) print("Austausch erfolgreich") break
Code: Alles auswählen
def remove_files(path): for filename in glob.glob(os.path.join(path, 'CONNECT*'): print("{} wird entfernt".format(filename)) shutil.rmtree(filename)
Die "Sonderzeile" für das `CONNECT_11043_5` hatte ich vergessen rauszunehmen.
Ich werde mich etwas Intensiver mit 'glob' beschäftigen, damit ich die Abläufe wirklich verstehe und diese nicht einfach anwende.
Die Sleep funktionen nutze ich gerne damit der Text länger sichtbar ist und die Anwender etwas zeit haben den Ablauf zu beobachten.
(gibt es da bessere Lösungen?)
Ich bin dir sehr dankbar für die Hilfe mein "fertiges" Programm sieht nun folgendermaßen aus
Code: Alles auswählen
# -*- coding: utf-8 -*-
"""
Created on Tue Dec 4 08:45:14 2018
@author: cpohlmann
"""
import os
import time
import sys
import shutil
import re
path_new = r"\\srv-23v-isea-01\temp\CPO\aft_CONNECT"
def remove_files(path):
for filename in os.listdir(path):
if filename.startswith('CONNECT_'):
print(os.path.join(path, filename + " wird entfernt"))
shutil.rmtree(os.path.join(path, filename))
def add_files(path_new):
for filename_new in os.listdir(path_new):
if filename_new.startswith('CONNECT_'):
print(os.path.join(path_new, filename_new + " wird eingefügt"))
shutil.copytree(os.path.join(path_new, filename_new), os.path.join(path, filename_new))
for path in [
r"C:\cad\VWG\catia\vwgrclite\opt\aft",
r"C:\CATIAV5\VWG\catia\vwgrclite\opt\aft",
]:
if os.path.isdir(path):
remove_files(path)
time.sleep(2)
os.system("cls")
add_files(path_new)
time.sleep(2)
os.system("cls")
print("Der Austausch ist abgeschlossen und das Programm wird nun beendet")
time.sleep(2)
- __blackjack__
- User
- Beiträge: 13102
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@TheBombTuber: Neben den `sleep()`-Aufrufen solltest Du ganz einfach auch die ``os.system("cls")``-Aufrufe entfernen. Schon gibt's das Problem das Du mit `sleep()` lösen möchtest nicht mehr.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman