Was mach ich falsch?? löschen von Dateien!!

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
pythonnewbie79
User
Beiträge: 10
Registriert: Mittwoch 11. März 2015, 17:03

ich möchte Dateien löschen und hab mir ein code gebastelt, aber bekomme folgende Fehlermeldung,

Traceback (most recent call last):
File "C:/Python34/loeschen_test.py", line 9, in <module>
shutil.rmtree(root+'/'+dat)
File "C:\Python34\lib\shutil.py", line 478, in rmtree
return _rmtree_unsafe(path, onerror)
File "C:\Python34\lib\shutil.py", line 360, in _rmtree_unsafe
onerror(os.listdir, path, sys.exc_info())
File "C:\Python34\lib\shutil.py", line 358, in _rmtree_unsafe
names = os.listdir(path)
NotADirectoryError: [WinError 267] Der Verzeichnisname ist ungültig: 'C:/Projekte Gesperrt/Auto/eingabe.txt'

kann mir jemand erklären was ich falsch mache?

Code: Alles auswählen

import os,shutil
from datetime import datetime, timedelta
verz='C:/Projekte Gesperrt/'
day5 = datetime.now()-timedelta(days=5)
for root,dirs,files in os.walk(verz):
    for dat in files:
        last_mod = datetime.fromtimestamp(os.path.getmtime(root+'/'+dat))
        if last_mod < day5:
            shutil.rmtree(root+'/'+dat)
BlackJack

@pythonnewbie79: Du benutzt die falsche Funktion. Du willst *Dateien* löschen, und verwendest eine Funktion zum löschen von *Verzeichnissen*, die sich beschwert das sie einen Dateinamen als Argument bekommt und keinen Verzeichnisnamen.

Edit: Zum Verbinden von Pfadteilen sollte man `os.path.join()` verwenden und keine Zeichenkettenoperationen. Ausserdem wird da zweimal der gleiche Gesamtpfad erstellt — das würde ich nur *einmal* machen.
pythonnewbie79
User
Beiträge: 10
Registriert: Mittwoch 11. März 2015, 17:03

BlackJack hat geschrieben:@pythonnewbie79: Du benutzt die falsche Funktion. Du willst *Dateien* löschen, und verwendest eine Funktion zum löschen von *Verzeichnissen*, die sich beschwert das sie einen Dateinamen als Argument bekommt und keinen Verzeichnisnamen.

Edit: Zum Verbinden von Pfadteilen sollte man `os.path.join()` verwenden und keine Zeichenkettenoperationen. Ausserdem wird da zweimal der gleiche Gesamtpfad erstellt — das würde ich nur *einmal* machen.

joopp os.remove(root+'/'+dat) ist das richtige

BlackJack wie hättest du diese aufgabe gelöst??
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

So zum Beispiel:

Code: Alles auswählen

import os
from itertools import ifilter
from functools import partial
from datetime import datetime, timedelta

def walk_files(root):
    for path, _, filenames in os.walk(root):
        for filename in filenames:
            yield os.path.join(path, filename)

def is_older_than(date, filename):
    return datetime.fromtimestamp(os.path.getmtime(filename)) < date

def main():
    root = 'C:/Projekte Gesperrt'
    removal_date = datetime.now() - timedelta(days=5)
    for filename in ifilter(partial(is_older_than, removal_date), walk_files(root)):
        os.unlink(filename)

if __name__ == '__main__':
    main()
Antworten